【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をセッションに保存する

「【ASP.NET】C#冗長なViewStateをすっきりとSessionで管理する方法」への2件のフィードバック

  1. はじめまして、通りがかりました。
    僕もそのへんに関して色々と調べています。
    ASP.NETのモバイルFormでは標準搭載させているようです。
    その方式の弱点は、不整合が発生する可能性があるみたいですね、
    その対策としてモバイルFormでは履歴管理を行っているみたいです。

    http://msdn.microsoft.com/ja-jp/library/cteh3e77(VS.80).aspx

  2. はじめまして。
    コメントありがとうございます。
    モバイルFormでは標準搭載なんですね。
    初めて知りました。
    貴重な情報をありがとうございます。
    不整合を履歴で管理か。なるほどですね!

コメントを残す

メールアドレスが公開されることはありません。

17 − fifteen =