2010-05-11 3 views
4

Pour mes variables globales et les données que je me trouve dans un dilemne à l'opportunité d'utiliser HttpApplicationState ou variables statiques - Quelle est la meilleure approche?Quelle est la meilleure approche avec les variables globales dans les applications ASP.Net?

Ce document indique que l'on doit utiliser des variables statiques sur HttpApplicationState: http://support.microsoft.com/default.aspx?scid=kb;en-us;Q312607

Cependant, une chose que j'aime HttpApplicationState (et System.Web.Caching.Cache), est que l'on peut facilement énumérer les entrées et sélectionner les éléments à supprimer (je l'ai créé une CacheManager.axd mondiale à cet effet), alors que je ne crois pas qu'il y ait un moyen facile avec les variables statiques (et même alors, il ne sait pas quoi faire pour « re-Initialiser » les), sans recycler le pool d'applications.

Toutes les suggestions sur une belle façon polyvalente pour traiter et gérer les objets globaux?

Merci, Mark.

Répondre

1

Vos instincts sont corrects. Utilisez System.Web.Caching. La gestion de cache intégrée prend en charge toutes les tâches lourdes en termes d'allocation de mémoire et d'expiration des objets obsolètes ou de faible priorité.

Assurez-vous d'utiliser une convention de nommage, pour vos clés de cache, qui fait sens sur la route. Si vous commencez à vous fier fortement à la mise en cache, vous devrez pouvoir cibler/filtrer différentes clés de cache par leur nom.

0

En règle générale, il est bon d'essayer d'éviter l'état global dans les applications Web lorsque cela est possible. ASP.NET est un environnement multithread dans lequel plusieurs requêtes peuvent être traitées en parallèle. À moins que votre état global ne soit immuable (en lecture seule), vous devrez faire face aux défis de la gestion de l'état mutable partagé.

Si votre état partagé est immuable, et vous n'avez pas besoin d'énumérer, alors je ne vois aucun problème avec les variables statiques.

Si votre état partagé est volatile/mutable, alors vous voudrez probablement créer une abstraction au-dessus de quel mécanisme underlyig vous choisissez de stocker les données afin de garantir que l'accès et la modification de cet état partagé est cohérent et conforme aux les attentes du code qui le consomme. J'utiliserais probablement aussi le cache système dans une telle conception, juste pour pouvoir tirer parti des fonctionnalités d'expiration et de dépendance intégrées au service de mise en cache (si nécessaire).

Questions connexes