SQL Serverにバックアップされたセッションがあり、次のようなコマンドシーケンスを実行する場合
HttpContext.Current.Session['user']
HttpContext.Current.Session['user']
これは、値をフェッチするためにセッションDBテーブルに2つの要求を行いますか、それともasp.netは複数のDBヒットを防ぐためにSessionオブジェクトに対して何か特別なことをしますか?
SQL Serverにバックアップされたセッションがあり、次のようなコマンドシーケンスを実行する場合
HttpContext.Current.Session['user']
HttpContext.Current.Session['user']
これは、値をフェッチするためにセッションDBテーブルに2つの要求を行いますか、それともasp.netは複数のDBヒットを防ぐためにSessionオブジェクトに対して何か特別なことをしますか?
絶対そうです。
私は SQL サーバーのセッション状態をセットアップしており、その上で Profiler を実行しました。最適化された DB 呼び出しを明確に確認できます。実際には、1 回のショットで複数のセッション アイテムを取得するための最適化があります。
以下のコードのように、SINGLE 最適化された一連の呼び出しも発生します (注: セッション アイテムを取得するための単純な単一の DB 呼び出しではありません)。
HttpContext.Current.Session['user']
HttpContext.Current.Session['userTwo']
注: .NET 4 でテスト済み
必要に応じて、独自のセッション状態プロバイダーを実装できます。 http://msdn.microsoft.com/en-us/library/ms178587.aspx