什么是LRU缓存和内存缓存C#之间的区别

时间:2015-09-19 08:15:30

标签: c# caching memory lru

请原谅我的noob问题,因为我还是一名初级编码员,看看使用Dictionary和Linked list以及内存缓存C#的LRU缓存之间的区别,如何在内存缓存上实现LRU列表。

提前致谢。

2 个答案:

答案 0 :(得分:0)

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

您需要考虑的另一件事是,当您将对象缓存在外部存储器中时,该对象应该是可序列化的。但内存缓存可以缓存任何对象而无需序列化。

答案 1 :(得分:0)

最近使用(LRU)在高速缓存已满且需要添加一个值时,将使用最少的键值逐出。而MemoryCache会将最旧的键值逐出,如果它们恰好有一个键值,则将其移出“按日期使用”。

说,如果添加的第一个键值至关重要,并且您始终无时无刻不在读取,那么可以将其保留在LRU缓存中,但是在memoryCache中,它最终会消失并且需要替换。有时候,尽管旧的键值消失了,这是您的后继之举,但最新的值却从您的后端(例如数据库)中获取。

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