我正在编写ASP.Net缓存的包装器,我很好奇他们使用的缓存算法。例如,假设缓存中的所有内容都具有相同的到期日期和优先级,它如何清除项目?
Wikipedia列出了11种不同的缓存算法。 ASP.Net使用其中之一吗?
答案 0 :(得分:3)
您描述的算法用于确定何时从缓存中删除项目的时间。但是,ASP.NET缓存没有设置容量 - 它存在于堆上,因此它的大小是未绑定的。
在缓存内部,缓存有一个以常规频率打勾的计时器。在每个刻度线上,它会查找过期的项目并将其删除。如果某个项目有一个滑动过期,则每个cache-get都会增加其生命周期,否则会被删除。
更新:
我已经完成了Cache类,实际上有一些逻辑可以在“内存压力”过高时删除一定比例的最少使用的项目。如果您转到System.Web.UI.Caching.CacheMemoryStats.GetPercentToTrim()
和CacheCommon.CacheManagerThread(Int32)
,您可以在Reflector中看到此信息。 UsageBucket
类中有一些相当复杂的逻辑,我现在无法理解,但如果方法的名称是任何东西,它似乎不是任何特殊的异域缓存算法,而是基于某些东西在最不常用的算法上。
所以我猜我错了:)