我正在围绕 ASP.Net 的缓存编写一个包装器,我很好奇它们使用什么缓存算法。例如,假设缓存中的所有内容都具有相同的到期日期和优先级,它如何清除项目?
Wikipedia列出了 11 种不同的缓存算法。 ASP.Net 使用其中之一吗?
最佳答案
您描述的算法用于确定当缓存已满时何时从缓存中删除项目。但是,ASP.NET 缓存没有固定容量 - 它位于堆上,因此它的大小不受限制。
缓存内部有一个计时器,它以固定的频率计时。在每次滴答时,它都会查找过期的项目并将其删除。如果一个项目有滑动过期,那么每次缓存获取都会增加它的生命周期,否则它会被删除。
更新:
我已经了解了 Cache 类,当“内存压力”过高时,实际上存在删除一定比例的最少使用项的逻辑。如果转到 System.Web.UI.Caching.CacheMemoryStats.GetPercentToTrim()
和 CacheCommon.CacheManagerThread(Int32)
,您可以在 Reflector 中看到这一点。 UsageBucket
类中有一些我现在无法理解的非常复杂的逻辑,但是如果方法的名称有任何意义,它似乎并不是任何特殊的奇异缓存算法,但是一些基于最不常用算法的东西。
所以我想我错了:)
关于asp.net - ASP.Net 使用什么缓存算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14598025/