![]() |
1
1
不使用时间戳的一个非常简单的方法是 ordered dictionary ,其中您在结尾处有MRU(即,当第二次请求同一对象时,您将其删除并在dict结尾处再次添加),因此,当您需要过期时,如果大小大于限制,您只需从已排序dict的开头删除一个大小为X的切片。 效率现在取决于如何实现有序的dict。 |
![]() |
2
1
你可以看看Java的 LinkedHashMap 和Linkedhashset的灵感。基本上,它为插入和可选的访问顺序维护一个双重LinkedList。 要维护LRU,可以定义在插入新条目时删除最旧条目(靠近LinkedList头部)的策略。 |
![]() |
3
0
我怀疑这有一个黄金子弹;最佳策略很大程度上取决于缓存未命中的成本和计算参数的时间分布。 垃圾收集方法可能会给你一些启发。如果您将缓存视为堆,而缓存命中视为引用,那么就有了高效收集缓存结果的问题。 低的 (不是零)点击次数。这个问题比GC更容易理解,因为任何你核的东西都可以重新计算。 在这种情况下,对方法的改进是为频繁命中的参数引入一个额外的缓存。向缓存命中时递增的每个缓存值添加计数器。当通过某个阈值时,缓存值将提升为其他缓存。两代缓存都可以进行大小钳制,所以对内存使用仍然有一个硬限制。这是一个经验问题,如果(可能的)减少缓存未命中可以证明开销(在两个缓存中查找、命中计数器、复制等)是合理的…… |
![]() |
Eddiex045 · 比较两个文本文件,匹配项转到一个新文件 2 年前 |
![]() |
NOBUD · 最大堆插入函数实现C++ 2 年前 |
![]() |
riasc · 嵌套贴图结构创建空贴图 6 年前 |
![]() |
Akshay Barpute · cpp中的以下链表程序有什么问题? 6 年前 |
![]() |
Batwoman05 · C++中是否有具有类似函数的树集数据结构 6 年前 |