Je suis récemment allé par moi-même ainsi. L'examen d'une mémoire cache sera de processus spécifiques (pas partagée entre plusieurs instances d'un site web ou natif application d'entreprise ou de plusieurs serveurs) il n'y a vraiment aucun avantage à avoir de multiples MemoryCache
cas de figure, sauf pour le code des raisons d'organisation (qui peut être obtenue par d'autres moyens).
La Mémoire cache est destiné à être utilisé seul pour la plupart en raison de sa gestion de la mémoire des capacités. En plus de les compteurs de performance (qui n'ont que des frais généraux) la MemoryCache est également en mesure d'expiration des articles quand il est à court de mémoire allouée.
Si l'instance actuelle du cache dépasse la limite de la mémoire
par la CacheMemoryLimit de la propriété, le cache de la mise en œuvre supprime
les entrées du cache. Chaque instance de cache de l'application peut utiliser le
quantité de mémoire qui est spécifié par le CacheMemoryLimit de la propriété.
de MemoryCache.CacheMemoryLimit Propriété
En utilisant une seule instance de la MemoryCache elle peut s'appliquer à cette gestion de la mémoire de manière efficace l'ensemble de l'application exemple. Expirant le moins important, les éléments de l'ensemble de l'application. Cela permet de maximiser l'utilisation de la mémoire, sans dépasser vos capacités matérielles. En limitant la portée de tout un MemoryCache (comme pour une instance d'une classe), il ne peut plus gérer efficacement la mémoire de votre application (comme il ne peut pas "voir" le tout). Si toutes ces cache était "occupé" vous pouvez avoir un moment plus difficile la gestion de la mémoire et il ne sera jamais à être presque aussi efficace.
Ceci est particulièrement sensible dans les applications qui n'ont pas le luxe d'un serveur dédié. Imaginez que vous êtes l'exécution de votre application sur un serveur partagé, où vous avez seulement été alloué 150 mo de RAM (commun à bas prix de 10 $/mois hébergement), vous devez compter sur votre cache pour l'utiliser au max, sans le dépasser. Si vous dépassez cette utilisation de la mémoire de votre application de la piscine sera recyclé et votre application perd tous en mémoire les caches! (commune hébergement pas cher de pratique), La même chose pourrait s'appliquer à un non-application web hébergée dans la maison sur certains serveur d'entreprise. Même chose, vous avez dit de ne pas le porc toute la mémoire sur cette machine et à coexister pacifiquement avec d'autres applications professionnelles.
Cette mémoire-limite, le pool d'applications de recycler, de perdre caches chose est une commune "Achille guérir" les applications web. Lorsque les applications sont leur plus forte, ils réinitialiser le plus souvent due à un dépassement des allocations de mémoire, de perdre toutes les entrées du cache et à cet effet, de faire la plupart des travaux de ré-extraction des trucs qui auraient dû être mis en cache dans la première place. Sens de l'application perd le rendement à charge max. au lieu de gagner.
Je sais MemoryCache est la non-web version spécifique du Système.Web.La mise en cache.Cache de mise en œuvre, mais cela illustre la logique derrière le cache de mise en œuvre. La même logique peut s'appliquer à un non-projet web si vous n'avez pas exclusive d'utilisation du matériel informatique. Rappelez-vous, si votre cache les forces de la machine pour commencer à faire de fichier d'échange d'swaps alors votre cache est plus rapide que la mise en cache sur le disque. Vous aurez toujours besoin d'une limite quelque part, même si la limite est de 2 go ou quelque chose.
Dans mon cas, après avoir lu à ce sujet, je suis passé à l'aide d'un "public static MemoryCache" dans mon application et je l'ai simplement mise en cache des éléments distincts par leurs clés de cache. Par exemple, si vous souhaitez mettre en cache par exemple, vous pourriez avoir une clé de cache comme quelque chose comme "instance-{instanceId}-resourceName-{resourceId}". Il pense que le nom de l'espacement de vos entrées de cache.
Espérons que ça aide!