ASP.Net使用什么缓存算法?

4
我正在编写ASP.Net缓存的包装器,想知道他们使用的缓存算法。例如,假设缓存中的所有内容都具有相同的过期日期和优先级,它如何清除项目? 维基百科列出了11种不同的缓存算法。ASP.Net是否使用其中之一?

+1 有趣的问题,期待看到答案。 - Devjosh
1个回答

3
您描述的算法是用于确定在缓存变满时何时删除项目的。然而,ASP.NET缓存没有固定容量 - 它驻留在堆上,因此其大小是无限制的。
缓存内部具有以定期频率进行滴答声的计时器。每次滴答声都会查找过期的项目并将其删除。如果一个项具有滑动到期,则每个缓存获取都会增加其寿命,否则它将被删除。
更新:
我已经浏览了Cache类,并且实际上存在逻辑,当“内存压力”过高时,会删除一定比例的最不常用项目。如果您转到System.Web.UI.Caching.CacheMemoryStats.GetPercentToTrim()和CacheCommon.CacheManagerThread(Int32),可以在Reflector中看到这一点。使用Bucket类中有一些非常复杂的逻辑,我现在无法理解,但是如果方法的名称是任何参考标准,它似乎不是任何特定的奇特缓存算法,而是基于最不常用算法的东西。
所以我猜我错了 :)

1
那么如果内存用尽了会发生什么呢?我认为ASP.Net通常具有自适应的“限制”,以缓解机器上其他进程(包括它本身)的压力。 - Earlz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接