2009-05-12 11 views
3

Il existe an article qui recommande de stocker l'état de l'application ASP.NET dans les membres statiques de HttpApplication class (in Global.asax.cs).Variables statiques dans ASP.NET

Qu'en est-il de stocker l'état de l'application dans les membres statiques de autres classes?

J'ai essayé de le faire et il semble qu'il y ait plusieurs instances de ces variables peuvent exister (instance unique par AppDomain?). Est-il vrai et devrions-nous toujours utiliser seulement les champs statiques Application? Ou cela n'a pas d'importance?

Répondre

3

Cela fonctionne plutôt bien et c'est mieux que Application dans beaucoup de cas (il est fortement typé, par exemple). Assurez-vous juste que vous êtes au courant des problèmes d'enfilage et de verrouillage. En tant qu'expérience personnelle, j'ai réussi à mettre en cache des informations de configuration pour l'application ASP.NET dans une classe static dans deux sites Web.

1

Est-ce vrai et devrions-nous toujours utiliser uniquement les champs statiques de la classe Application?

Oui. Les données spécifiques à l'utilisateur (données de session) ne devraient pas aller ici.

Tous les utilisateurs de votre site sont dans la même instance d'application et partageront donc les mêmes variables statiques. Ce n'est certainement pas un bon remplacement pour la session, par exemple.

+0

J'ai rencontré cela sur le code I hérité d'un autre développeur. Le client essayait de comprendre pourquoi les tests multi-utilisateurs à petite échelle continuaient à échouer avec des données bizarres. Quand j'ai vu le code et expliqué le problème, le résultat a été un headslap collectif * * Assez facile, et maintenant nous avons un client pour la vie. :) –

3

Vous pouvez rencontrer de gros problèmes avec les variables statiques si vous faites quelque chose de plus que de simplement les lire dans une application Web. Asp.net est un environnement multithread. La collection d'applications verrouille pour vous pendant un Get ou un Set avec un verrou. Si vous utilisez des variables statiques, il n'y a pas de verrou en place.

Je suggère d'utiliser le fichier web.config pour stocker toutes vos variables en lecture seule dans sa propre section.

Questions connexes