我只是在为我不久前创建的一个名为WebCacheHelper的开源项目编写文档。它是System.Web.Caching中现有缓存功能之上的一个抽象。
当服务器内存不足时,我很难找到用于清除缓存的算法的细节。
我在MSDN上找到了这篇文章
当承载ASP.NET应用程序的Web服务器内存不足时,缓存对象有选择地清除项以释放系统内存。在将项添加到缓存中时,您可以相对于存储在缓存中的其他项为其分配相对优先级。当服务器处理大量请求时,分配较高优先级值的项不太可能从缓存中删除,而分配优先级较低值的项更有可能被删除。
这对我的品味来说还是有点模糊。我想知道在何时清除缓存对象时使用了哪些其他因素。这是上一次访问时间和优先级的结合吗?
发布于 2014-06-10 08:17:36
让我们看一下源代码。清除从TrimIfNecessary()类中的CacheSingle方法开始。首先,尝试删除FlushExpiredItems()类的CacheExpires方法中的所有过期项。如果这还不够的话,它就开始在CacheUsage.FlushUnderUsedItems()中迭代“桶”。缓存使用数据/统计数据根据CacheItemPriority划分为“桶”,它们的统计信息/LRU在每个桶中分别处理。有两个迭代通过桶。第一次迭代只删除新添加的项(在最后10秒内)。第二项移除其他项目。它开始从CacheItemPriority.Low桶及其LRU项中删除项。当移除足够多时,它将停止,否则会继续到下一个LRU项和更高优先级的桶中。它不接触CacheItemPriority.NotRemovable项,因为它没有将它们添加到使用桶中。
https://stackoverflow.com/questions/24044784
复制相似问题