我发现自己陷入了CacheItem没有正确清理的状态.在查看MSDN并纠正自己使用基于Utc的计算时,我发现了这个令人困惑的信息:
AbsolutExpiration用来设置一个"保持活着"的CacheItem,Priority.NotRemovable用来强制CacheItem永远存在.没有关于哪个属性覆盖另一个属性的通知.
下面的代码进行编译,SQL Profiler也确认只查询一次数据库,而其他每个请求都来自缓存.
CacheItemPolicy _cachePolicy = new CacheItemPolicy()
{
AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddHours(6)),
Priority = CacheItemPriority.NotRemovable
};
Run Code Online (Sandbox Code Playgroud)
我假设此代码强制缓存项目永久保留,但在创建12小时后清除,与MSDN关于该设置的注释一致.
"只有当缓存实现提供了从缓存中逐出条目并管理缓存条目数量的方法时,缓存实现才应为缓存条目设置NotRemovable优先级"
那么另一方面,为什么两个属性都可以一起工作?实现是否带来某种"更不可移动"?