我正在处理一个名为WebCacheHelper的创建的开源项目的文档。它是System.Web.Caching中现有Cache功能之上的抽象。
当服务器内存不足时,我无法找到用于清除缓存的算法的详细信息。
我在MSDN上找到了这个文字:
托管ASP.NET应用程序的Web服务器内存不足时, Cache对象有选择地清除项目以释放系统内存。什么时候 一个项目被添加到缓存中,您可以为其分配相对优先级 与存储在缓存中的其他项目相比。你的物品 分配较高优先级的值不太可能从中删除 当服务器处理大量请求时缓存, 而您分配较低优先级值的项目更多 可能被删除。
这对我的口味仍然有点模糊。我想知道还有哪些因素可用于确定何时清除缓存对象。它是上次访问时间和优先级的组合吗?
答案 0 :(得分:2)
我们来看看源代码。清除从TrimIfNecessary()
类中的CacheSingle
方法开始。首先,它尝试删除FlushExpiredItems()
类的CacheExpires
方法中的所有过期项。如果这还不够,它会开始迭代CacheUsage.FlushUnderUsedItems()
中的“桶”。缓存使用数据/统计信息根据CacheItemPriority
划分为“存储桶”,并在每个存储桶中单独处理其统计信息/ LRU。通过存储桶进行两次迭代。第一次迭代仅删除新添加的项目(在最后10秒内)。第二个删除其他项目。它开始从CacheItemPriority.Low
存储桶及其LRU项目中删除项目。它在被移除时停止,否则继续到下一个LRU项目和更高优先级的桶。它不会触及CacheItemPriority.NotRemovable
项,因为它不会将它们添加到使用桶中。