System.Web.Caching.Cache не обновляется вовремя? - PullRequest
2 голосов
/ 28 января 2011

Я использую System.Web.Caching.Cache в сборке, используемой моим сайтом. Я установил срок действия ключа (абсолютное истечение) на 10 секунд (только для отладки). Я также установил обратный вызов при удалении ключа.

Проблема в том, что я вижу, что кэш обновляется примерно через 20 секунд, а не 10.

Я использую HttpRuntime.Cache для этого.

Есть предложения, почему это происходит?

Я хотел бы показать пример кода, который может пролить больше света:

public  void OnUpdate(string key
                      , CacheItemUpdateReason reason
                      , out object expensiveObject
                      , out CacheDependency dependency
                      , out DateTime absoluteExpiration
                      , out TimeSpan slidingExpiration)
{
    using (StreamWriter sw = new StreamWriter(@"C:\temp\foo.txt",true))
    {
        sw.WriteLine("Updated Cache at " + DateTime.UtcNow); 
    }
    expensiveObject = 11;
    dependency = null;
    absoluteExpiration = DateTime.UtcNow.AddSeconds(3);
    slidingExpiration = Cache.NoSlidingExpiration;
}
protected void Page_Load(object sender, EventArgs e)
{
    log.WriteInfo("Updated Cache", MethodBase.GetCurrentMethod());
    Page.Cache.Insert("foo", (object)11, null, DateTime.UtcNow.AddSeconds(10), Cache.NoSlidingExpiration, new CacheItemUpdateCallback(OnUpdate));
}

Здесь я использовал Page.Cache. Обновление должно быть каждые 3 секунды. Фактически это выполняется каждые 40 секунд, как показано на распечатке ниже:

Updated Cache at 1/28/2011 1:38:20 AM Updated Cache at 1/28/2011 1:38:40 AM Updated Cache at 1/28/2011 1:39:00 AM Updated Cache at 1/28/2011 1:39:20 AM Updated Cache at 1/28/2011 1:39:40 AM Updated Cache at 1/28/2011 1:40:00 AM Updated Cache at 1/28/2011 1:40:20 AM Updated Cache at 1/28/2011 1:40:40 AM Updated Cache at 1/28/2011 1:41:00 AM Updated Cache at 1/28/2011 1:41:20 AM Updated Cache at 1/28/2011 1:41:40 AM Updated Cache at 1/28/2011 1:42:00 AM Updated Cache at 1/28/2011 1:42:20 AM Updated Cache at 1/28/2011 1:42:40 AM

В чем может быть проблема?

Ответы [ 2 ]

5 голосов
/ 28 января 2011

Таймер истечения срока действия внутреннего кэша срабатывает только каждые 20 секунд.

Я размышлял в System.Web.Caching.CacheExpires

Но потом нашел его уже на SO

Изменение частоты истечения срока действия элемента кэша ASP.NET?

0 голосов
/ 18 февраля 2011

Вы можете использовать класс PCache, который реализован внутри библиотеки PokeIn . Очень хорошо то, что нет никаких ограничений в отношении этого класса в бесплатной версии. Он имеет много функциональных возможностей и намного лучше, чем класс System.Web.Caching.Cache.

Кроме того, по ссылке приведен пример проекта. Вы можете изменить TimerInterval до 6 секунд с помощью PCache.

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