Я создал свой собственный диспетчер кеша для разрабатываемого мной веб-сайта и искал лучший способ очистить кеш при определенных обстоятельствах.
Я нашел много статей, в которых говорится, что правильный способ очистки кеша - это вызвать HttpRuntime.Close ()
Однако в моей настройке модульных тестов я вызываю инкапсулированную функцию HttpRuntime.Close (), и кеш НЕ очищается.
Я ожидал, что он выполнит что-то подобное
foreach (DictionaryEntry cacheItem in HttpRuntime.Cache)
{
HttpRuntime.Cache.Remove(cacheItem.Key.ToString());
}
Цикл foreach отлично работает в моей инкапсулированной функции, но Close () никогда не работает правильно.
Я неправильно понимаю назначение HttpRuntime.Close () или здесь происходит что-то более зловещее?
Ой, хорошо, спасибо за внимание. Что вы имеете в виду под зависимостями кеша?
– Joseph16 апреля 2009, 20:42Когда записи добавляются в кеш, вы можете указать им зависимости, такие как тайм-аут, файл, другая кешированная запись и т. д., которые очистят элемент кеша, если эта зависимость сработает. См. Также http://msdn.microsoft.com/en-us/library/system.web.caching.cachedependency.aspx
– Lucero16 апреля 2009, 20:47Это не совсем мой вопрос. Я имею в виду, что если у меня есть 4 элемента в кэше, и я перебираю их так, как я описал, в кэше остается 0 элементов. Однако, когда я использую Close (), 4 элемента все еще там.
– Joseph16 апреля 2009, 20:38Это потому, что в документах говорится о том, что не является полной правдой. Close () не предназначен для очистки кеша.
– Lucero16 апреля 2009, 20:42На самом деле я уже протестировал код, который задал в своем вопросе, и он работает нормально. Я понимаю проблему с перечислением, но по какой-то причине у кеша нет проблем с удалением элемента при просмотре списка.
– Joseph16 апреля 2009, 20:37