Кэшируемый элемент, никогда не истекающий

У меня есть класс, который содержит следующее свойство:

public Dictionary<string, int> CommentCounts {
    get {
        string cacheKey = "CommentCounts";
        HttpContext c = HttpContext.Current;

        if (c.Cache[cacheKey] == null) {
            c.Cache.Insert(cacheKey, new Dictionary<string, int>(), null, DateTime.UtcNow.AddSeconds(30), System.Web.Caching.Cache.NoSlidingExpiration, CacheItemPriority.High, null);
            c.Trace.Warn("New cached item: " + cacheKey); 
        }

        return (Dictionary<string, int>)c.Cache[cacheKey];
    }
    set {
        HttpContext.Current.Cache["CommentCounts"] = value;
    }
}

Кажется, что оператор Trace только работает однажды, и не каждые 30 секунд после того, как объект Кэша истек. Единственным путем я могу добраться, это для обновления Кэшируемого элемента должно сделать шанс кода и восстановить проект, который является, очевидно, меньше, чем идеал.

Что я пропускаю?Заранее спасибо...

5
задан ianpoley 22 January 2010 в 14:58
поделиться

2 ответа

Набор Часть свойства, вероятно, является причиной - кэш [«Ключевое»] = значение эквивалентно вызову Cache.insert с ] NoabsoluteExpiration, NoSliDingExpiration , что означает, что он никогда не истекает. Правильное решение было бы так выглядеть так:

public Dictionary<string, int> CommentCounts {
    get {
        const string cacheKey = "CommentCounts";
        HttpContext c = HttpContext.Current;

        if (c.Cache[cacheKey] == null) CommentCounts = new Dictionary<string, int>();

        return (Dictionary<string, int>)c.Cache[cacheKey];
    }
    set {
        const string cacheKey = "CommentCounts";
        c.Cache.Insert(cacheKey, value, null, DateTime.UtcNow.AddSeconds(30), System.Web.Caching.Cache.NoSlidingExpiration, CacheItemPriority.High, null);
        c.Trace.Warn("New cached item: " + cacheKey); 
    }
}
8
ответ дан 14 December 2019 в 04:38
поделиться

У меня была эта проблема до и задала вопрос здесь ; Это никогда не было отвечено, но может быть некоторые полезные подсказки отладки в ответах.

0
ответ дан 14 December 2019 в 04:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: