【ASP.NET】C#冗長なViewStateをすっきりとSessionで管理する方法

ASP.NETでは、自動で、ページの状態を保持するViewStateがhtmlタグの
<input type=”hedden”>によって吐き出される。
ポストバックが起きて画面が変わっても、状態を保持しているため、細かい設定などしなくても入力値などが保持される。
しかし、GridView等で一覧を作った時など、このViewStateがかなりの長さになって出力に時間がかかったりすることがある。
実際に、仕様上どうしても数百件のデータをページング無しでGridView出力しないといけない画面があり、この画面のViewStateは数千行になった経験がある。
このViewStateをクライアントサイドに出力するのではなく、なんとかサーバーサイドに(Sessionとして)保持出来ないか、調べてみたところ、ASP.NET2.0ではViewStateを保持するSessionPageStatePersisterクラスというのがあるとのこと。
早速テストして試してみた。

まず新規のクラスファイル(SessionPageStateAdapter.cs)を作成し、以下のコードを記述。
これをApp_Codeフォルダに保存。

public class SessionPageStateAdapter :
    System.Web.UI.Adapters.PageAdapter
{
    public override PageStatePersister GetStatePersister ()
    {
        return new SessionPageStatePersister(this.Page);
    }
}

次に「ASP.NETフォルダの追加」で「App_Browsers」フォルダを作成。
そのフォルダの中に「App.browser」ファイル(ファイル名はなんでもいい)を作成し、以下のコードを記述。
この「browser」ファイルだが、各ブラウザごとにいろいろと設定を記述することが出来るファイルらしい。(初めて使用した)


  
    
      
    
  

以上の操作だけで、全画面のViewStateの出力がすっきりとし、パフォーマンス的にはいいんじゃないだろうか?
まぁ、まだテスト段階の使用なので問題などあれば追記していこうと思う。
このSessionPageStatePersisterクラス、将来的にはデフォルト使用されるようになる気がする。

参考サイト
ビュー ステート: 沈黙のパフォーマンス キラー
[.NET] ViewStateをセッションに保存する