2009-09-03 6 views
1

私は、特定のオブジェクトをユーザーセッションに入れることができ、セッションがどのように格納され、そこから値が取得されるのか疑問に思っています。キーAをセッション状態から引き出す要求をすると、キーBも読み取られますか?ユーザーセッションからオブジェクトを取得する要求があった場合、セッション全体がロードされますか?

私はviewstateが一つの大きなオブジェクトとして格納されていることを知っています。そして、一度読み込まれると、コードからアクセスされると仮定しています。これはセッション状態データと同様か、サーバーから要求されたキーのみをロードしますか?

私の状態が20KBで、5KBの値を取得したい場合は、20KBすべて、または必要な5KBだけを読み込みますか?

答えて

2

デフォルトでは、セッションの状態は、セッションが期限切れになるまで(特定のユーザーからの非アクティブ期間)、メモリに保存されます。ビューステートはリクエスト間にまったく格納されませんが、実際には隠しフォームフィールドとしてページに送信されます。このデータは、後続の要求でサーバーに送り返されます。

質問に答えるために、デフォルトの動作では、セッション全体が既にロードされているため、実際にアクセスしたかどうかにかかわらず、そこにあり、メモリにあります。

は、しかし、これを管理するためのいくつかのオプションがあり、あなたはここに優れた参照を見つけることができます。

http://msdn.microsoft.com/en-us/library/z1hkazw7.aspx

+0

ViewStateは、セッション状態ではなく非表示のフィールドに配置されます。セッション状態はサーバー上のメモリに残ります。そのため、サーバーファームを使用する場合、後続の要求でユーザーが別のサーバーにバウンスされたり、サーバーアプリケーションプールが更新されたりするとセッションが失われる可能性があります。 – NerdFury

+0

申し訳ありませんが、私は間違って読んでいます。あなたはビューの状態を言った。 – NerdFury

0

デフォルトでは、ユーザーセッションはメモリに保存されています。データベースに格納するように設定できますが、シリアライズされ、再インスタンス化されると完全に読み込まれます。

したがって、ユーザーセッションに20KB相当のデータがある場合は、常に20KBのメモリが使用されます。

関連する問題