web-dev-qa-db-fra.com

System.Web.Caching ou System.Runtime.Caching est-il préférable pour une application Web .NET 4

J'ajoute la mise en cache à une application Web ASP.NET. Il s'agit de .NET 4, donc je peux utiliser les classes dans l'espace de noms System.Runtime.Caching (qui, si je comprends bien, a été ajouté pour fournir des fonctionnalités similaires à celles trouvées dans System.Web.Caching, mais pour les non-Web- applications.)

Mais puisque cela est une application web, est-ce que je ferais mieux d'utiliser System.Web.Caching? Ou le nouveau System.Runtime.Caching est-il supérieur d'une manière ou d'une autre?

44
Tim Goodman

Microsoft recommande d'utiliser System.Runtime.Caching à toutes fins de mise en cache. Voir ceci: http://msdn.Microsoft.com/en-us/library/dd997357.aspx

Bien que, je suis tombé sur quelques threads où les gens ont des problèmes avec l'instance MemoryCache.Default. Après un certain temps, il cesse de fonctionner correctement. Tout élément que vous ajoutez à l'aide de la méthode Ajouter ou Définir n'est pas réellement ajouté au cache. J'ai essayé la même chose et j'ai pu reproduire ce problème en appelant explicitement la méthode MemoryCache.Default.Dispose ().

Voici les liens: MemoryCache Empty: retourne null après avoir été défini

http://forums.asp.net/t/1736572.aspx/1

Ma recommandation est d'utiliser le System.Web.Caching (HttpContext.Current.Cache)

MISE À JOUR:

Ce problème a été résolu par MS. Vérifiez la réponse acceptée dans le post ci-dessous: Problème de cache d'exécution résol

45
dotnetster

System.Runtime.Caching vous permet de mettre en cache toutes les applications .Net, pas seulement le processus de travail IIS. Donc, si vous avez une exigence qui accédera au cache dans plusieurs scénarios, utilisez System.Runtime . Vous pouvez également vérifier cet adaptateur de cache qui vous permet de basculer entre la mise en cache du tissu d'exécution, du Web et de l'application. https://bitbucket.org/glav/cacheadapter

Encore une chose, si vous avez une batterie multi-serveurs, avec une configuration à charge équilibrée, assurez-vous d'avoir des sessions persistantes ou un modèle de cache distribué.

12
Brad Ruderman