0

SQLCacheDependency クラスを使用して、複数の結果セットを持つ SQL ストアド プロシージャをキャッシュしようとしています。ストアド プロシージャの最初の 3 つのクエリは、Web サイトのすべてのユーザーに一般的なクエリであり、4 つ目はユーザー名でフィルター処理されたデータを取得します。

ストアド プロシージャの 4 番目のクエリはユーザー名でフィルター処理されているため、別のユーザーが実行するたびに SQLCacheDependency クラスがキャッシュからすべての結果セットを削除することを意味するのでしょうか、それともデータベースにヒットして、ストアド プロシージャの 4 番目のクエリの結果を取得し、キャッシュから最初の 3 つのクエリの結果を取得しますか?

前もって感謝します

4

1 に答える 1

1

Application Cache はグローバルであるため (つまり、すべてのユーザーに同じキャッシュが使用される)、最初のユーザーの結果がキャッシュされ、後続のすべてのユーザーに提供される可能性があります明らかにあなたが望む結果ではありません。SQLCacheDependency のドキュメントから:

SqlCacheDependency クラスは、特定の SQL Server データベース テーブルを監視します。テーブルが変更されると、テーブルに関連付けられたアイテムがキャッシュから削除され、新しいバージョンのアイテムがキャッシュに追加されます。

おそらく、最初の 3 つのクエリすべてを分離し、それらを個別にキャッシュし、4 つ目のクエリはキャッシュしないようにする必要があります。キャッシュは、多くのユーザー間でコストのかかる操作 (この場合は SQL クエリ) のコストを償却することを実際に意図しています。ユーザー固有のものを保存したい場合は、それがSessionCookies、およびViewStateの目的です。

于 2012-01-29T17:07:29.493 に答える