web-dev-qa-db-ja.com

.net 4.0のMemoryCacheとObjectCacheの違いは何ですか?

.NET framework 4.0 MemoryCacheObjectCacheの違いは何ですか?どのオブジェクトをどこで使用しますか?

45
Abdul Saboor

ObjectCacheは、ObjectCacheを書いた人が従うことを望んでいるルールを遵守するCacheを構築する方法を示す抽象クラスです。 abstract であるため、ObjectCacheを直接インスタンス化することはできません。

MemoryCacheはObjectCacheの実際の実装です。

ドキュメントから:

ObjectCache

オブジェクトキャッシュを表し、オブジェクトキャッシュにアクセスするための基本メソッドとプロパティを提供します。

メモリキャッシュ

インメモリキャッシュを実装する型を表します。

MemoryCacheの宣言を確認します。

public class MemoryCache : ObjectCache, 
    IEnumerable, IDisposable

MemoryCacheはObjectCacheから継承していることがわかります。つまり、メモリをストレージとして使用するオブジェクトのキャッシュです。したがって、これはObjectCacheの実装です。

自分で書くこともできます。たとえば、DatabaseCacheはObjectCacheからも継承できますが、代わりにデータベースをバッキングストレージとして使用します。

日常の使用では、ニーズに合っていれば、MemoryCacheを使用して使用します。独自のコードを作成する場合は、ObjectCacheを継承し、必要なメソッドとプロパティを実装できます。ただし、実際には、Microsoftが既に他の多くのベンダーと同様にいくつかの他のキャッシングソリューションを利用可能にしているため、これを行うことによる実用的なメリットはほとんどありません。

64
dash

MSDN ;から

ObjectCacheタイプは、メモリ内オブジェクトキャッシュのプライマリタイプです。組み込みのMemoryCacheクラスは、ObjectCacheクラスから派生しています。 MemoryCacheクラスは、ObjectCacheクラスから派生した.NET Framework 4の唯一の具体的なオブジェクトキャッシュ実装です。

public class MemoryCache : ObjectCache, 
    IEnumerable, IDisposable

MemoryCacheObjectCacheから継承します。

このように、デフォルトのMemoryCacheインスタンスへの参照を取得できます。

public static ObjectCache cache = MemoryCache.Default;
16
Soner Gönül

ObjectCacheは抽象クラスであり、それ自体を使用することはできません。 Dashはコメントで述べているように、キャッシュの構築方法とキャッシュがサポートする操作を示すように設計されています。 MemoryCacheObjectCacheの実装であり、質問からはおそらく使用すべきものです。ただし、ObjectCacheは抽象であるため、FileCacheを継承する独自のObjectCacheを簡単に記述でき、完全に有効です。

4
PhilPursglove