【问题标题】:Whats the difference between LRU Caching and Memory Caching C#LRU缓存和内存缓存C#有什么区别
【发布时间】:2015-12-16 10:10:00
【问题描述】:

请原谅我的菜鸟问题,因为我还是一名初级编码员,LRU 缓存使用字典和链表与内存缓存 C# 有什么区别,如何在内存缓存上实现 LRU 列表。

提前致谢。

【问题讨论】:

  • 这与你用任何其他语言做的事情并没有太大的不同——也许如果你能说出你自己尝试过的事情,我们可以回答,但现在这是一个非常开放和广泛的问题,实际上并没有适合这里(对不起)
  • LRU 缓存通常是使缓存中未使用的实体“过期”的一种方式。 LRU 的一种实现是 BCL 中的 MemoryCache 类。

标签: c# caching memory lru


【解决方案1】:

LUR 是一种使缓存过期并将新项目添加到缓存的算法。当缓存已满时,此算法会使缓存中最近最少使用的项目过期。 MemoryCache 是 .net 4 中的一个类,之后是在堆内存中实现缓存的一种方式。缓存可以根据您缓存的媒体以不同的方式分类,您可以缓存在硬盘驱动器或内存上,根据内存的位置,您可以将其分类为内存中(堆内存内)和内存外(a例如在另一台服务器上的堆外内存)。 C# 中的 MemoryCaching 使用内存中的,您必须小心,因为它可以使用您应用程序的所有内存。因此,如果您有多个节点,最好不要使用它。

您必须考虑的另一件事是,当您将对象缓存到内存外时,该对象应该是可序列化的。但是内存缓存可以缓存任何对象而无需序列化。

【讨论】:

    【解决方案2】:

    最近最少使用(LRU)在缓存已满并且需要添加值时驱逐最少使用的键值。而 MemoryCache 会逐出最旧的键值,或者如果碰巧有键值,或者超过它们的“使用日期”的键值。

    假设如果你添加的第一个键值是至关重要的并且你碰巧一直在读取,那么在 LRU 缓存中它会被保留,但在 memoryCache 中它最终会消失并且需要被替换。有时,虽然旧的键值消失是您所追求的,但最新的值会从您的后端(例如数据库)中提取出来。

    还应考虑添加现有键值是否应被视为“已使用”(因此最近更新的内容往往会保留)或者“已使用”仅在您读取键值时,所以您只是喜欢你的读者喜欢的东西。与往常一样,如果您有多个任务或线程使用并发,我会考虑并发。

    【讨论】:

      猜你喜欢
      • 2017-07-15
      • 2011-04-11
      • 2015-03-11
      • 1970-01-01
      • 2021-04-28
      • 2017-11-24
      • 2011-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多