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?
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:
Représente un cache d'objets et fournit les méthodes et propriétés de base pour accéder au cache d'objets.
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.
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;
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. MemoryCache
est 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.