Как кеширование «Приоритет» и «AbsoluteExpiration» работают вместе? - PullRequest
8 голосов
/ 28 октября 2011

Я попал в CacheItem, который не убирался правильно.Глядя на MSDN и исправляя себя при использовании вычислений на основе Utc, я обнаружил эту запутанную информацию:

AbsolutExpiration используется, чтобы установить «keep-alive» CacheItem, Priority.NotRemovable используется, чтобы CacheItem существовал вечно.Нет уведомления о том, какое свойство переопределяет другое.

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

CacheItemPolicy _cachePolicy = new CacheItemPolicy() 
{
    AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddHours(6)),
    Priority = CacheItemPriority.NotRemovable 
};

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

"Реализации кэша должны устанавливать приоритет NotRemovable для записи в кэше только в том случае, если реализация кэша предоставляет способы удаления записей из кэша и управления количеством записей в кэше"

Тогда с другой стороны, зачем обоим свойствам вообще работать вместе?Приносит ли реализация что-то вроде «более несъемного»?

1 Ответ

7 голосов
/ 10 июля 2012

Таким образом, в соответствии с это «NotRemovable» предотвращает автоматическое удаление записи в кеше (например, когда в кеше не хватает места), но будет удалено, когда истечет срок ее действия или вы извлечете ее из кэш.

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

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