我使用HttpContext.Current.Cache使用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'不再被解雇......但这只是猜测。
这引出了我的问题:
我是否需要在app.config或IIS中设置任何设置?或者我做错了什么?
修改 此外,我不明白为什么带有CacheItemUpdateCallback的Insert overload没有参数CacheItemPriority。 但是,overload with CacheItemRemovedCallback确实有一个优先级参数。也许,如果我可以将CacheItemPriority设置为' High'它已经解决了我的问题。
编辑:我发现了问题:每个应用程序池都有一个空闲超时属性,设置为20分钟。
答案 0 :(得分:2)
应用程序池的idle timeout设置为20分钟(默认情况下)。因为它是一个测试实例,所以没有用户保持网站活着。
答案 1 :(得分:1)
如果您的猜测结果证明IIS过期缓存是正确的,那么this可能是您想要调整的设置。
但是我猜如果每次完成25分钟之后就会发生这种情况,那么你有一个隐藏的配置集,因为如果你没有指定缓存过期,那么只要进程正在运行或者如果存在,项目就会被缓存内存分配紧急情况。