2011-12-16 29 views
1

私は現在ASP.Net状態サーバーを使用してアプリケーションにセッションデータを格納しています。ASP.Net状態サーバーとアクセスHttpContext.Current.Session

セッションの大きな問題を回避するには(質問しないでください)、セッションから特定の文字列を含む一連のキーを削除する必要がありますが、正確なキーはわかりません。

私は以下のコードのようにしたいと思います。セッションデータは処理中であるため、これを実行することによってセッションデータ全体をASP.Netワーカープロセスにロードしています。これは問題です。なぜなら、現在のアプリケーションがセッション中に大量のデータを入れるからです(私たちが解決しようとしている長期的な問題)。

誰かがセッションがどのようにアクセスされるのか知っていますか?セッションをメモリにロードせずにセッションキーを反復処理する方法はありますか?

//does this line cause the session to be loaded back into the WP? 
var session = HttpContext.Current.Session; 

if (session != null) 
{ 
    //what about this line? 
    var keysToRemove = session.Keys.Cast<object>(). 
     Where(key => key.ToString().Contains(MYKEY)).ToList(); 
    foreach (var key in keysToRemove) 
    { 
     session.Remove(key.ToString()); 
    } 
} 

答えて

1

全セッションは、ユーザーの組み込みプロバイダー要求時に常にメモリーにロードされます。これは、実行が通常のページコードに達する前にロードされます(あなたが想定しているように遅延しません)。読み込みを防ぐために行うことができるのは、初期のイベントの1つをリッスンし、リクエストからセッションIDを削除するモジュールを持つことだけです。

注:session.Keysはすでにストリングのコレクションであるため、このような複雑なキャストは削除できます。

関連する問題