我有一个软件项目,它从不同大小的对象创建一系列指纹(哈希)值。当然,对象越大,哈希的计算成本就越高。哈希值用于比较目的。
我现在希望缓存哈希值以提高后续比较的性能。对于缓存中的任何给定条目,我有以下可用指标:
那么继续我的问题。鉴于需要限制缓存的大小(将其限制为特定数量的条目),替换缓存项的平衡方法是什么?
显然,较大的对象散列成本更高,因此需要尽可能长时间地保留它们。但是,我想避免使用大量大对象填充缓存将阻止缓存 future (较小的)项目的情况。
因此,根据我可用的指标(见上文),我正在寻找一个很好的通用“公式”,用于在缓存变满时过期(删除)缓存条目。
所有的想法,意见表示赞赏。
最佳答案
您需要考虑对象的性质。考虑一下对象很快就会被再次调用的概率。并删除最不可能的对象。
这与您使用的软件和对象的性质非常相关。
如果它们在程序中连续使用,它们可能会遵守 Locality of reference 原则。所以你应该使用 LRU(最近最少使用)算法。
如果命中计数较高的对象更有可能被再次调用,则使用该对象(并删除最低的对象)。
看看Cache Algorithms
原则上,您需要计算:
min(p*cost)
p = 被再次调用的概率。
cost = 再次缓存该对象的成本。
关于c# - 缓存条目替换算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5277964/