Is this algorithm implementation LRU or MRU?
我正在使用C#在我的项目中实现MRU(最近使用最多)缓存。
我在Google上搜索了有关MRU的一些概念和实现,以及与之相反的LRU(最近最少使用的LRU),并找到了本文http://www.informit.com/guides/content.aspx?g=dotnet
- 那是我的代码。术语混淆。有人说保存最近使用过的项目的缓存是MRU缓存。其他人则说,MRU意味着最近使用过的物品被丢弃了。如果您在" MRU缓存"上进行Google搜索,则会看到用于两种类型的缓存的术语。如果您在发布代码的文章之前阅读了该文章,请参见notifyit.com/guides/content.aspx?g=dotnet
-
在我看来,它就像是MRU的实现。请注意,搜索是如何从链接列表的开头开始并返回的,每当访问一个节点时,它就会移到列表的前面。在Add()中,使用AddFirst()添加该节点,而在TryGetValue()中,它删除该节点并将其添加到列表的前面。
434511
基于此处记录的内容:http://en.wikipedia.org/wiki/Cache_algorithms#Most_Recently_Used
是LRU。考虑items是一个"有序列表"。
最近使用的项目在"前面"。
添加新项目时,它们会调用items.AddFirst(newNode);,将其添加到列表的最前面。
当一个项目被"触摸"时,他们使用以下调用将其移动到列表的最前面:
1 2
| items.Remove(node);
items.AddFirst(node); |
当列表已满时,它使用items.RemoveLast();
从列表中推送"最后" /"最旧"项目
当缓存达到容量上限时,它将首先删除"最近最少使用"的项目。
434511
Microsoft的" MRU"列表正确使用LRU缓存替换算法。
请注意,在这种情况下,Microsoft对MRU列表使用的术语与缓存社区使用的术语不同。
缓存社区使用MRU / LRU讨论替换(或逐出)策略。当缓存已满时,您需要在列表中放置一个新项目,应从列表中删除哪个项目?
Microsoft提供了用于获取最近使用的项目的工具,例如下拉列表或最近的文档列表。
-
https://docs.microsoft.com/zh-cn/windows-hardware/drivers/install/mru-source-list-functions
-
https://www.codeproject.com/articles/78/most-recently-used-list-in-a-combobox
这意味着要正确实现MRU列表,您需要实现LRU缓存逐出策略。
在我看来,它就像是MRU的实现。请注意,搜索是如何从链接列表的开头开始并返回的,每当访问一个节点时,它就会移到列表的前面。在Add()中,使用AddFirst()添加该节点,而在TryGetValue()中,它删除该节点并将其添加到列表的前面。
基于此处记录的内容:http://en.wikipedia.org/wiki/Cache_algorithms#Most_Recently_Used
是LRU。考虑items是一个"有序列表"。
最近使用的项目在"前面"。
添加新项目时,它们会调用items.AddFirst(newNode);,将其添加到列表的最前面。
当一个项目被"触摸"时,他们使用以下调用将其移动到列表的最前面:
1 2
| items.Remove(node);
items.AddFirst(node); |
当列表已满时,它使用items.RemoveLast();
从列表中推送"最后" /"最旧"项目
当缓存达到容量上限时,它将首先删除"最近最少使用"的项目。
- 我从Wiki en.wikipedia.org/wiki/Cache_algorithms#Most_Recently_Used中检查了MRU的概念"最近使用过的(MRU):与LRU相比,先丢弃最近使用的项目。"我认为,当缓存已满,我应该删除列表的最前面,因为最近访问的节点是第一个节点,而不是最后一个节点。
-
看起来您是正确的(基于Wiki文章)。为了使其成为该标准中的MRU,应删除列表前面而不是后面的项目。我将更新我的答案。
Microsoft的" MRU"列表正确使用LRU缓存替换算法。
请注意,在这种情况下,Microsoft对MRU列表使用的术语与缓存社区使用的术语不同。
缓存社区使用MRU / LRU讨论替换(或逐出)策略。当缓存已满时,您需要在列表中放置一个新项目,应从列表中删除哪个项目?
Microsoft提供了用于获取最近使用的项目的工具,例如下拉列表或最近的文档列表。
-
https://docs.microsoft.com/zh-cn/windows-hardware/drivers/install/mru-source-list-functions
-
https://www.codeproject.com/articles/78/most-recently-used-list-in-a-combobox
这意味着要正确实现MRU列表,您需要实现LRU缓存逐出策略。