Срок действия кэширования не работает должным образом

Я использую HttpContext.Текущий.Кэш для кэширования дорогостоящих запросов данных с помощью CacheItemUpdateCallback.

идея заключается в том, что пользователь должен загрузить данные один раз, а затем updatecallback сохраняет объект обновляется каждые 30 минут.

вот как я вставляю / перезаписываю кэш:

HttpContext.Current.Cache.Insert(cacheID, cachedObject, null,
                                  expiryTimeStamp,
                                  Cache.NoSlidingExpiration,
                                  updateCallBack);   

по причинам теста я устанавливаю дату истечения срока действия, как это (обновление каждые 20 секунд):

var expiryTimeStamp = DateTime.Now.Add(new TimeSpan(0, 0, 20));

все работает нормально. Это значит, что обновление дорогого объекта каждые 20 секунд-но только около 25 минут. Тогда триггер "updateCallBack" больше не вызывается!

Я думаю, проблема в том, что IIS удаляет кэш, поэтому обратный вызов "CacheItemUpdateCallBack" больше не запускается...Но это только догадка.

это приводит меня к моему вопросу:

есть ли какие настройки я должен установить в приложение.config или в IIS? Или что я делаю не так?

EDIT: Кроме того, я не понимаю, почему вставить перегрузки С CacheItemUpdateCallback не имеет параметра CacheItemPriority. Однако перегрузка с CacheItemRemovedCallback имеет параметр приоритета. Возможно, если бы я мог установить CacheItemPriority на "высокий", это уже решило бы мою проблему.

EDIT: я нашел проблему: есть свойство тайм-аута простоя для каждого пул приложений, который был установлен на 20 минут.

2 ответов


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


Если ваше предположение оказывается правильным о Кеше IIS expiring, то этой может быть настройка, которую вы хотели бы настроить.

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