Кэширование пользовательского элемента управления и очистка этого кэша программно - PullRequest
4 голосов
/ 13 июля 2010

Я пытаюсь кэшировать пользовательские элементы управления, и на некоторых страницах я хочу кэшировать отдельные объекты.Существует несколько способов реализации кэширования, и моя голова ломается над ним.

То, как я сейчас вижу параметры кэширования:

У вас есть опция PartialCaching, которая настроена для кэширования элемента управления для30 минут, и после этого он очищается сам ... У вас есть varByParam для идентификации страницы по ее параметрам строки запроса ... или другие параметры варьирования

Но я просто не могу найти подходящий способ добавить кеширование ви иметь возможность программно очищать кеширование при обновлении одного из объектов, используемых в элементе управления, из внутреннего интерфейса.

Вы можете сделать HttpContext.Current.Cache.Insert (), который принимает ключ, для которогоВы можете уничтожить кеширующий элемент позже, используя команду remove ... Это может сохранить объекты в кеше, но вы можете использовать такие опции, как varByParam?

Мои вопросы сгорели до двух:

  1. Есть ли способ очистить кеширование определенных пользовательских элементов управления из кода?Если да, то можно ли это сделать в соответствии с параметрами Varby?
  2. Как кэширование объектов будет реагировать на зарегистрированных пользователей или анонимных пользователей с помощью Insert ()?

РЕДАКТИРОВАТЬ: I 'Я кеширую несколько вещей .... И я действительно поражен тем, какой выбор сделать, ссылаясь на кеширование.Может ли Cache.Insert варьироваться по параметрам?

Основная проблема заключается в том, что нужно отредактировать вещи из бэкэнда, которые должны вызвать событие, которое восстанавливает или очищает все элементы кэширования, ссылающиеся на этот объект.

Ответы [ 2 ]

3 голосов
/ 13 июля 2010

Вы можете удалить элементы из кэша вывода, используя следующее.

HttpResponse.RemoveOutputCacheItem("/caching/CacheForever.aspx");

Теперь, это только даст вам часть того, что вы ищете. Это удалит ВСЕ записи кэша для этой конкретной страницы. Документация MSDN подтверждает поведение.

Что касается вашего другого вопроса, то Cache.Insert () - это единое хранилище кэша в приложении, идентификация пользователя не учитывается.

Теперь я бы также подробнее рассмотрел то, что вы делаете, возможно, имеет смысл кэшировать только фактические данные, а затем вы можете добавлять / удалять конкретные элементы. Тем не менее, если ваш .control действительно требует много ресурсов процессора и т. Д. Для обработки отображения, тогда идея выходного кэша работает.

2 голосов
/ 13 июля 2010

Используя класс System.Web.Caching.Cache, вы можете кэшировать элементы и создавать зависимости для элементов в кэше.Если вы используете сервер SQL, то вы можете использовать класс SqlCacheDependency для очистки элементов из вашего кэша на основе вашей базы данных.

В противном случае вы можете создать свои собственные производные класса CacheDependencyкоторый вы можете использовать для достижения того же.Я нашел этот пост , описывающий это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...