在.NET 4.0中,MemoryCache和ObjectCache之间有什么区别?

54

.NET框架4.0中MemoryCacheObjectCache有何区别?在哪些场景下应该使用它们?


13
MemoryCache 是 ObjectCache 的具体实现。从设计角度来看,ObjectCache 是抽象的,展示了如何构建缓存的方式。MemoryCache 则是这个抽象类的具体实现。 - dash
3个回答

71

ObjectCache是一个抽象类,展示了如何构建符合ObjectCache作者规定的缓存。你不能直接实例化ObjectCache,因为它是抽象的

MemoryCache是ObjectCache的一个实际实现

从文档中可以看到:

ObjectCache

表示一个对象缓存,并提供访问对象缓存的基本方法和属性。

MemoryCache

表示实现内存缓存的类型。

看一下MemoryCache的声明:

public class MemoryCache : ObjectCache, 
    IEnumerable, IDisposable

我们可以看到,MemoryCache继承自ObjectCache - 也就是说,它是一个使用内存作为存储的对象缓存 - 因此它是ObjectCache的实现。
你可以编写自己的缓存,例如DatabaseCache,它也可以继承自ObjectCache,但它将使用数据库作为后备存储。
对于日常使用,只要满足您的需求,您将使用和消耗MemoryCache。如果您想编写自己的缓存,可以继承ObjectCache并实现所需的方法和属性。然而,在现实中,这样做可能没有太多实际的好处,因为Microsoft已经提供了几种其他缓存解决方案,许多其他供应商也提供了类似的解决方案。

1
要创建自己的,请参阅MSDN上的“创建自定义缓存类”(https://msdn.microsoft.com/en-us/library/ff919782.aspx#Anchor_5)。 - Stacked

17

出自MSDN

ObjectCache 类型是内存中对象缓存的基本类型。内置的 MemoryCache 类派生自 ObjectCache 类。 MemoryCache 类是 .NET Framework 4 中唯一从 ObjectCache 类派生的具体对象缓存实现。

public class MemoryCache : ObjectCache, 
    IEnumerable, IDisposable

MemoryCache 继承自 ObjectCache

您可以通过以下方式获取默认的 MemoryCache 实例引用:

public static ObjectCache cache = MemoryCache.Default;

4

ObjectCache 是一个抽象类,你不能直接使用它。正如Dash在他的评论中所说,它的设计是为了展示缓存应该如何构建以及支持哪些操作。 MemoryCacheObjectCache 的实现,根据您的问题,很可能是您应该使用的。然而,由于 ObjectCache 是抽象的,因此您同样可以编写自己的 FileCache 并继承 ObjectCache,这也是完全有效的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接