3

特定のセッション状態のサイズを把握しようとしています。重いページ(テーブル内の大量のデータ)の1つでは、徐々に遅くなります。この問題は、システムからログアウトすることで解決されます。

JavaScriptのメモリリークを探してページのプロファイルを作成しましたが、何も見つかりませんでした。私の次の攻撃計画は、ViewStateとSessionStateを見ることです。ViewStateは単純ですが、SessionStateには課題があります。

セッション状態のサイズを把握するのに役立つトリックやツールを知っている人はいますか?

編集

セッション状態はInProcです。

4

2 に答える 2

6

それを測定します:

int totalBytes;
var formatter = new BinaryFormatter();
for(int i = 0; i < Session.Count; i++)
{
    using (var stream = new MemoryStream())
    {
        formatter.Serialize(stream, Session[i]);
        stream.Flush();
        totalBytes += stream.Length;
    }
}

また、トレースを有効にすると、セッションに関する詳細が表示されると思います(これについてはよくわかりませんが、自分で試したことはありません)。

于 2009-11-03T17:51:29.403 に答える
1

ASP.NETトレースについて言及している人もいますが、私自身はあまり運がありませんでした。トレース情報を表示できましたが、セッションセクションにデータが入力されませんでした。

ただし、httpハンドラーを使用して現在のセッション(およびキャッシュ)を表示するCodeProjectの便利な記事を次に示します。

この質問に関して2つの問題があります。

  1. セッション状態がInProcの場合、ストレージスペースは表示されません

    セッション状態がInProc(処理中)を実行している場合、コンテンツを形成する実際のオブジェクトはコレクションに保存されず、オブジェクトへの参照のみが保存されます。これらのオブジェクトが「セッション状態」で占めるサイズの数値は、これらの状況では誤解を招く可能性があります。

  2. これはBinaryFormatter、セッションデータのサイズの「非常に大まかな概算のみを提供する」ものを使用します。ASP.NETは「int、string、boolなどの基本的な型に最適化された内部フォーマッターを使用する」ため、これは概算にすぎません。

そうは言っても、私はそれが有用であると感じ、共有する価値があると思いました。サイズをプロファイリングするために、セッション状態をプロセスから外す価値があるかもしれません。

于 2010-08-04T20:48:14.850 に答える