У меня есть класс, который содержит следующее свойство:
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 секунд после того, как объект Кэша истек. Единственным путем я могу добраться, это для обновления Кэшируемого элемента должно сделать шанс кода и восстановить проект, который является, очевидно, меньше, чем идеал.
Что я пропускаю?Заранее спасибо...
Набор
Часть свойства, вероятно, является причиной - кэш [«Ключевое»] = значение
эквивалентно вызову 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);
}
}
У меня была эта проблема до и задала вопрос здесь ; Это никогда не было отвечено, но может быть некоторые полезные подсказки отладки в ответах.