web-dev-qa-db-fra.com

Quelle est la différence entre MemoryCache et ObjectCache dans .net 4.0?

Quelle est la différence entre .NET Framework 4.0 MemoryCache et ObjectCache? Où utiliser quel objet?

45
Abdul Saboor

ObjectCache est la classe abstraite qui montre comment vous devez créer un cache qui respecte les règles que la personne qui a écrit ObjectCache veut que vous respectiez. Vous ne pouvez pas instancier ObjectCache directement tel quel abstrait .

MemoryCache est une implémentation réelle d'ObjectCache.

De la documentation:

ObjectCache

Représente un cache d'objets et fournit les méthodes et propriétés de base pour accéder au cache d'objets.

MemoryCache

Représente le type qui implémente un cache en mémoire.

En regardant la déclaration de MemoryCache:

public class MemoryCache : ObjectCache, 
    IEnumerable, IDisposable

Nous pouvons voir que MemoryCache hérite d'ObjectCache - c'est-à-dire que c'est un cache pour les objets qui utilise la mémoire comme stockage - c'est donc une implémentation d'ObjectCache.

Vous pourriez écrire le vôtre; par exemple, DatabaseCache, qui pourrait également hériter d'ObjectCache, mais à la place, il utiliserait une base de données comme stockage de sauvegarde.

Pour un usage quotidien, à condition qu'il réponde à vos besoins, vous utiliseriez et consommeriez un MemoryCache. Si vous souhaitez écrire le vôtre, vous pouvez hériter d'ObjectCache et implémenter les méthodes et propriétés requises. Cependant, en réalité, cela présente probablement peu d'avantages pratiques, car Microsoft propose déjà plusieurs autres solutions de mise en cache, comme le font de nombreux autres fournisseurs.

64
dash

De MSDN ;

Le type ObjectCache est le type principal du cache d'objets en mémoire. La classe MemoryCache intégrée dérive de la classe ObjectCache. La classe MemoryCache est la seule implémentation concrète de cache d'objets dans .NET Framework 4 qui dérive de la classe ObjectCache.

public class MemoryCache : ObjectCache, 
    IEnumerable, IDisposable

MemoryCache hérite de ObjectCache.

Vous pouvez obtenir une référence à l'instance par défaut MemoryCache comme ceci;

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

ObjectCache est une classe abstraite, vous ne pouvez pas "l'utiliser" en soi. Comme le dit Dash dans son commentaire, il est conçu pour montrer comment un cache doit être construit et quelles opérations il prend en charge. MemoryCacheest une implémentation de ObjectCache et de votre question est probablement ce que vous devez utiliser. Cependant, comme ObjectCache est abstrait, vous pouvez tout aussi facilement écrire votre propre FileCache héritant de ObjectCache et ce serait parfaitement valide.

4
PhilPursglove