在我的应用程序中,我使用了MemoryCache,但我不希望缓存项过期。因此,这些项是在默认策略下插入到缓存中的,没有设置AbsoulteExpiration或SlidingExpiration。
最近,在高负载服务器上,我的缓存出现了问题,它返回null值而不是之前插入缓存中的期望值。后来发现,除了那些明确设置了过期日期的元素外,其他元素也会被从缓存中删除。当内存压力大时,当CacheMemoryLimit和/或PhysicalMemoryLimit的值超过时,MemoryCache也会删除其他元素。
如何防止这种情况?如何确保将元素设置到缓存中后,可以安全地再次从中获取它?
我考虑将PollingInterval设置为一个巨大的值,但这只会延迟潜在的问题(并且在文档中引用的轮询间隔是最大时间,而不是确切或最小时间)。将PhysicalMemoryLimitPercentage设置为100%也无法解决问题,因为它仅引用物理安装的内存而不是整个可用虚拟内存。或者我错了,它真的有帮助吗?
最近,在高负载服务器上,我的缓存出现了问题,它返回null值而不是之前插入缓存中的期望值。后来发现,除了那些明确设置了过期日期的元素外,其他元素也会被从缓存中删除。当内存压力大时,当CacheMemoryLimit和/或PhysicalMemoryLimit的值超过时,MemoryCache也会删除其他元素。
如何防止这种情况?如何确保将元素设置到缓存中后,可以安全地再次从中获取它?
我考虑将PollingInterval设置为一个巨大的值,但这只会延迟潜在的问题(并且在文档中引用的轮询间隔是最大时间,而不是确切或最小时间)。将PhysicalMemoryLimitPercentage设置为100%也无法解决问题,因为它仅引用物理安装的内存而不是整个可用虚拟内存。或者我错了,它真的有帮助吗?
CacheItemPolicy
有一个Priority属性,可以设置为NotRemovable
。 - Eric B