IIS и ASP.NET кеширование - PullRequest
       3

IIS и ASP.NET кеширование

2 голосов
/ 30 октября 2011

Я создал веб-сайт, который использует классическое кэширование ASP.NET:

DataSet ds = new DataSet();
ds = (DataSet) Cache["MyDataSet"];

В коде ASP.NET я установил продолжительность на несколько часов, однако IIS сбрасывает кэш намного раньше.
Где в IIS можно вручную установить продолжительность кэширования ASP.NET?

У меня достаточно ОЗУ, с полностью загруженным кешем и работающими сайтами у меня около 1/3 свободного (3GBtotal, Web Server 2008R2).

(у меня тяжелые вычисления (несколько минут), которые находятся в кеше, и во время работы я обновляю только небольшие части кеша)

Ответы [ 2 ]

2 голосов
/ 30 октября 2011

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

Cache.Insert("CacheItem", yourobject,
    null, DateTime.Now.AddHours(3), 
    System.Web.Caching.Cache.NoSlidingExpiration);

Более подробное объяснение см. Здесь .

Вот несколько причин, по которым объект может быть удален из Cache:

ASP.NET может удалить данные из кэша по одной из следующих причин:

Because memory on the server is low, a process known as scavenging.

Because the item in the cache has expired.

Because the item's dependency changes.

Чтобы помочь вам управлять кэшированными элементами, ASP.NET может уведомить ваше приложение. когда элементы удаляются из кэша.

Scavenging

Очистка - это процесс удаления элементов из кэша, когда память мало Элементы удаляются, если к ним не было доступа в некоторых время или когда элементы помечаются как имеющие низкий приоритет, когда они добавляются в кеш. ASP.NET использует объект CacheItemPriority для определения какие предметы убрать в первую очередь. Для получения дополнительной информации см. Как: Добавить Предметы в кеш. Истечение

Помимо очистки, ASP.NET автоматически удаляет элементы из кеш, когда они истекают.

0 голосов
/ 30 октября 2011

Чтобы проверить, когда ваш элемент автоматически удаляется из вашего кэша, вы можете получать уведомления, когда это происходит: ASP.NET предоставляет для этой цели делегат CacheItemRemovedCallback.Оператор Cache.Insert имеет перегрузку, поэтому вы можете написать что-то вроде

Cache.Insert(
        "CacheItem",
        yourobject, 
        null,
        DateTime.Now.AddHours(3), 
        System.Web.Caching.Cache.NoSlidingExpiration
        CacheItemPriority.Default,
        new CacheItemRemovedCallback(ObjectRemovedCallback));

(не уверен, правильно ли я понял, что это 100%), а затем обработать это методом ObjectRemovedCallback в бизнес-объекте.Проверьте http://msdn.microsoft.com/en-us/library/7kxdx246.aspx для более подробной информации.Существует большая вероятность, что вы можете узнать причину преждевременного истечения срока действия кэша здесь.

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