2009-05-12 16 views
3

Es gibt an article, die empfiehlt, ASP.NET-Anwendungsstatus in statischen Membern HttpApplication Klasse (in Global.asax.cs) zu speichern.Statische Variablen in ASP.NET

Wie wäre es mit dem Speichern des Anwendungsstatus in statischen Elementen von anderen Klassen?

Ich habe versucht, dies zu tun, und es scheint, dass mehrere Instanzen dieser Variablen existieren können (einzelne Instanz pro AppDomain?). Ist es wahr und sollten wir immer nur Anwendung Klasse statische Felder verwenden? Oder ist es egal?

Antwort

3

Es funktioniert ziemlich gut und es ist in vielen Fällen besser als Application (es ist stark typisiert, zum Beispiel). Stellen Sie sicher, dass Sie Threading- und Locking-Probleme kennen.

Als persönliche Erfahrung, ich habe es geschafft, Konfigurationsinformationen für ASP.NET App in einer static Klasse in ein paar Websites zwischenzuspeichern.

1

Ist das wahr und sollten wir immer nur die statischen Felder der Anwendungsklasse verwenden?

Ja. Benutzerspezifische Daten (Sitzungsdaten) sollten nicht hierher gehen.

Alle Benutzer Ihrer Site befinden sich in der gleichen Anwendungsinstanz und teilen daher dieselben statischen Variablen. Es ist definitiv kein guter Ersatz für die Sitzung, zum Beispiel.

+0

Ich lief das auf Code, den ich von einem anderen Entwickler geerbt habe. Der Client versuchte herauszufinden, warum kleine Multi-User-Tests mit seltsamen Daten versagten. Als ich den Code sah und das Problem erklärte, war das Ergebnis ein kollektives * headslap! * Ziemlich einfache Lösung, und jetzt haben wir einen Client für das Leben. :) –

3

Sie können große Probleme mit statischen Variablen bekommen, wenn Sie mehr tun als nur von ihnen in einer Webanwendung zu lesen. Asp.net ist eine Multithread-Umgebung. Die Anwendungssammlung sperrt während eines Get-Vorgangs oder eines Satzes mit einer Sperre für Sie. Wenn Sie statische Variablen verwenden, ist keine Sperre vorhanden.

Ich würde vorschlagen, die web.config zu verwenden, um alle Ihre schreibgeschützten Variablen in einem eigenen Bereich zu speichern.