Что будет с объектами в кеше с истечением срока (0,0,0)? - PullRequest
1 голос
/ 07 декабря 2011

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

int cacheTimeout = 5; // Default 5 minute timeout
if(ConfigurationManager.AppSettings["CacheTimeout"] != null)
{
    cacheTimeout = Convert.ToInt32(ConfigurationManager.AppSettings["CacheTimeout"].ToString());
}
_cache.Insert(Key, CacheItem, null, DateTime.MaxValue, new TimeSpan(0, cacheTimeout, 0));

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

Я думаю, что объект будет немедленно удален.Правильно или нет?

1 Ответ

0 голосов
/ 08 декабря 2011

Ответ «Неправильно».

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

Поэтому изменил код так:

int cacheTimeout = 5; // Default 5 minute timeout
if(ConfigurationManager.AppSettings["CacheTimeout"] != null)
{
    cacheTimeout = Convert.ToInt32(ConfigurationManager.AppSettings["CacheTimeout"].ToString());
}
TimeSpan expiration = cacheTimeout > 0 ? new TimeSpan(0,cacheTimeout,0) : new TimeSpan(0,0,1);
_cache.Insert(Key, CacheItem, null, System.Web.Caching.Cache.NoAbsoluteExpiration, expiration, CacheItemPriority.Default, OnUpdateCallback);

Таким образом, если мы do есть проблемы с кэшированием, мы можем обновить web.config, чтобы установить время кэширования равным 0 и срок его действия составляет 1 секунду.

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