30 votes

HttpRuntime.Cache [] vs Application []

Je sais que la plupart des gens recommandent d'utiliser HttpRuntime.Cache car il a plus de flexibilité ... etc. Mais que faire si vous voulez que l'objet persiste dans le cache pendant la durée de vie de l'application? Y a-t-il un gros inconvénient à utiliser l'objet Application [] pour mettre en cache des choses?

20voto

Tom Jelen Points 1770

Tant que vous n'avez pas l'abus de l'état de l'application, alors je ne vois pas de problème à l'utiliser pour les éléments que vous ne voulez pas de date d'expiration. Sinon, je serais probablement utiliser une variable statique près le code qui l'utilise. De cette façon, vous éviter de passer par HttpApplicationState et puis être forcé à avoir une référence à System.Web, si je veux accéder à mes données.

Mais assurez-vous de réfléchir à la façon dont vous utilisez l'objet(s) que vous vous en tenez à HttpApplicationState. Si ses un jeu de données qui vous continuez à ajouter des trucs pour chaque demande, à un certain moment, vous finissez par manger trop de mémoire sur le serveur web. La même chose peut se produire si vous continuez à ajouter des éléments supplémentaires à HttpApplicationState lorsque vous traitez les demandes, à un certain moment vous permettra de forcer le redémarrage.

C'est sans doute l'avantage de l'utilisation du Cache dans votre situation. Consommer de plus grandes quantités de mémoire n'est pas aussi fatal, puisque vous permettre ASP.NET pour libérer les éléments dans votre cache lorsque la mémoire devient rare.

19voto

ssmith Points 1655

L'Application est déconseillée par le Cache. Si vous besoin de quelque chose avec de l'application, alors vous devez soit créer comme un membre statique d'une classe ou d'utiliser le Cache. Si vous voulez aller à la Cache de la route, mais ne voulez pas jamais expirer, vous devez utiliser le CacheItemPriority.NotRemovable option lorsque vous Insérez la valeur dans le cache. Notez qu'il est possible d'utiliser cette priorité et de toujours utiliser les dépendances de cache, par exemple, si vos données dépendait de quelque chose dans le système de fichiers. Tous les CacheItemPriority n'est de prévenir la HttpRuntime.Cache de manière intelligente l'effacement de l'élément quand il sent la pression de la mémoire et utilise son Moins Récemment Utilisé l'algorithme de purger les éléments qui ne sont pas de voir beaucoup d'utilisation.

8voto

Vilx- Points 37939

Utilisez le cache lorsque vous souhaitez que les éléments expirent automatiquement ou soient récupérés lorsque la mémoire est insuffisante. Sinon, utilisez des variables statiques si vous le pouvez, car elles donneront de meilleures performances que de fouiller la collection ApplicationState. Je ne sais pas exactement ce qui serait le cas quand utiliser ApplicationState, mais il y en a certainement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X