Кэширование SQL Server Query с несколькими результирующими наборами - PullRequest
0 голосов
/ 28 января 2012

Я пытаюсь кэшировать хранимую процедуру SQL с несколькими наборами результатов, используя класс SQLCacheDependency. Первые три запроса в хранимой процедуре являются запросами, общими для всех пользователей сайта, а четвертый возвращает данные, отфильтрованные по имени пользователя.

Поскольку четвертый запрос в хранимой процедуре фильтруется по имени пользователя, означает ли это, что класс SQLCacheDependency будет удалять все наборы результатов из кэша каждый раз, когда его выполняет другой пользователь, или это означает, что он будет база данных, чтобы получить результаты четвертого запроса в хранимой процедуре, и получить результаты первых 3 запросов из кэша?

Заранее спасибо

1 Ответ

1 голос
/ 29 января 2012

Поскольку кэш приложений является глобальным (т. Е. Один и тот же кэш используется для всех пользователей), то , вероятно, произойдет, так это то, что результаты первых пользователей будут кэшироваться и обслуживаться для всех последующих пользователей.Очевидно, не тот результат, который вы хотите.Из документации SQLCacheDependency :

класс SqlCacheDependency отслеживает конкретную таблицу базы данных SQL Server.Когда таблица изменяется, элементы, связанные с этой таблицей, удаляются из кэша, и в кэш добавляется новая версия элемента.

Вероятно, вам следует отделить все 3 первых запроса, кэших самостоятельно, а не кеш 4-й.Кэширование действительно предназначено для амортизации стоимости дорогостоящей операции (в данном случае SQL-запроса) для многих пользователей.Если вы хотите сохранить что-то, что зависит от пользователя, то для этого нужны Session , Cookies и ViewState .

...