我发现自己陷入了一个没有正确清理的CacheItem
。在查看MSDN并纠正自己使用基于Utc的计算时,我发现了这个令人困惑的信息:
AbsolutExpiration
用于设置CacheItem
的“保持活力”,Priority.NotRemovable
用于强制CacheItem
永久存在。没有关于哪个属性覆盖另一个属性的通知。
下面的代码进行编译,SQL Profiler也确认只查询一次数据库,而其他每个请求都来自缓存。
CacheItemPolicy _cachePolicy = new CacheItemPolicy()
{
AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddHours(6)),
Priority = CacheItemPriority.NotRemovable
};
我假设此代码强制缓存项永久保留,但在创建12小时后清除,与MSDN关于该设置的注释一致。
“缓存实现应为a设置NotRemovable优先级 仅当缓存实现提供逐出的方法时才缓存条目 来自缓存的条目和管理缓存条目的数量“
那么另一方面,为什么两个属性都可以一起工作?实现是否带来某种“更不可移动”?
答案 0 :(得分:7)
因此根据this“NotRemovable”会阻止自动删除缓存条目(例如缓存空间不足时),但是当缓存过期或手动将其从缓存中移除时将被删除。
NotRemovable 当服务器释放系统内存时,不会自动从缓存中删除具有此优先级的缓存项。但是,具有此优先级的项目将根据项目的绝对或滑动到期时间与其他项目一起删除。