La durée de vie de ASP.NET Variable Statique

Je suis contenant de l'information dans les variables statiques définies dans la classe de la page (pas au Mondial.asax). Je ne déclarer la variable dans le code comme:

protected static int SomeGlobalUnsecureID;
protected static string SomeGlobalUnsecureString;

et de définir la variable dans PageLoad événement. Par exemple, je vérifie l'ID de la base de données, si elle est différente de SomeGlobalUnsecureID, je l'ai mise à jour SomeGlobalUnsecureID et de la Chaîne à partir de quelque part d'autre, sinon de les laisser comme c'est. Ceci est parfaitement en sécurité dans mon application. la logique (c'est à dire celles données ne sont pas sécurisées, tout le monde peut y accéder, pas de problème); la seule chose que je veux accomplir est

  1. Contenir la même quantité de mémoire, indépendamment d'utilisateurs connectés

  2. Changer si et seulement si persistante info est différente de celle de
    la "mémoire" (parce qu'en fait, la lecture de la chaîne de beaucoup de temps pour
    moi.

Maintenant, depuis que je fais le check-in PageLoad, je n'ai pas de problèmes dans reloaded pages. Cependant, ma page est pleine de WebMethods, et parfois, je vois que les variables statiques sont remis à zéro. Et la partie étrange est, la session est toujours actif, même lorsque les variables statiques sont mis à zéro (donc-> pas de serveur ou de l'application. piscine redémarrer etc.)

C'est vraiment étrange pour moi. Je suppose que la variable statique tiendra sa valeur jusqu'à ce que l'application (en quelque sorte) se termine. Mais même la Session n'a pas de date d'expiration, la variable statique est remis à zéro. Que proposez-vous? Est l'aide de variables d'application un meilleur choix? Tous les documents que j'ai lu sur le web suggèrent variables statiques au lieu de variables d'application, dois-je les déclarer en quelque sorte différent?

  • Les déclarations en haut de votre question ne sont pas statiques, btw.
  • 🙂 ok, corrigé
  • "définir la variable dans PageLoad événement.' Je pense que tu veux dire initialiser? La définition d'une variable est ce que vous faites lorsque vous écrivez protected static int Something;
  • "Maintenant, depuis que je fais le check-in PageLoad, je n'ai pas de problèmes dans reloaded pages." - cela sonne comme une condition de concurrence en attente de se produire. Je voudrais examiner thread-safe initialisation à la place.
  • Statique lass dure jusqu'à la prochaine recycler. Mettez vos variables dans une classe statique de l'utiliser dans d'autres
InformationsquelleAutor paul simmons | 2012-01-18