6 Stimmen

Wie erhält man die letzte Startzeit für eine ASP.NET-Anwendung?

Wie erhält man das letzte Mal, dass die aktuelle ASP.NET-Anwendung gestartet wurde?

8voto

scradam Punkte 994

Wenn Sie auf eine zusätzliche Variable verzichten möchten, erhalten Sie damit das letzte Mal, dass der IIS-Arbeitsprozess (auch bekannt als Anwendungspool) neu gestartet wurde:

System.Diagnostics.Process.GetCurrentProcess().StartTime

Ich verwende es, um die Cachefähigkeit einzustellen, da die Seite auf Inhalten basiert, die ich nur beim Start der Anwendung dynamisch generiere:

Response.Cache.SetLastModified(System.Diagnostics.Process.GetCurrentProcess().StartTime);

Es ist möglich, einzelne Websites innerhalb eines Anwendungspools/Arbeitsprozesses zu stoppen/starten, aber ich schließe aus diese Stelle dass auf diese Weise keine statischen Anwendungsobjekte neu erstellt werden, so dass ich davon ausgehe, dass das mit dem Arbeitsprozess verknüpfte Datum hier wahrscheinlich das nützlichste ist.

Denken Sie auch daran, dass eine statische Anwendungsvariable, die beim Start der Anwendung erstellt wird, in vielen Fällen dazu führt, dass Sie den Zeitpunkt des ersten Besuchs der Anwendung. Es ist möglich, dass der Worker-Prozess schon viel früher gestartet wurde, was an Ausdrücke wie "IIS application warm up" und "IIS application autostart" und eine weitere Diskussion über die Initialisierung statischer Felder im Allgemeinen erinnert. Was Sie wählen, kann davon abhängen, ob Sie sich für die letzte Wiederaufbereitungszeit des Worker-Prozesses interessieren oder ob Sie sich für den Zeitpunkt interessieren, zu dem andere statische Elemente berechnet wurden.

0 Stimmen

Denken Sie daran, dass das Überschreiben/Aktualisieren von Anwendungsdateien nicht einen Neustart des Prozesses bewirken. Die Website w3wp Prozess bleibt derselbe. Alternative Antwort: stackoverflow.com/a/66409256/56621

6voto

SLaks Punkte 832502

Sie können ein statisches Feld auf DateTime.Now sur Application_Start in Global.asax.

4voto

Felice Pollano Punkte 32046

Nun, ich denke, erstellen Sie eine statische Klasse mit einem statischen Konsruktor, der eine Eigenschaft zuweist DateTime.Now .

0 Stimmen

Es mag funktionieren, aber das Ergebnis war nicht das, was ich erwartet hatte. Es scheint, dass die App recycelt werden kann, wenn sie nicht viel benutzt wird.

0 Stimmen

Ja, das stimmt, die App wird recycelt, wenn sie nicht benutzt wird, und die statischen Daten verschwinden. Das nächste Mal, wenn ein Anruf eingeht, wird eine neue Anwendung gestartet und initialisiert, so dass die statischen Daten dieses neue Datum widerspiegeln

3 Stimmen

Sie können das automatische Recycling deaktivieren, indem Sie in den Einstellungen des App-Pools nachsehen.

2voto

Alex from Jitbit Punkte 44084

Die einfachste Lösung:

public static readonly DateTime StartupTime = DateTime.Now;

Ich würde jeden dringend davor warnen, die System.Diagnostics.Process.GetCurrentProcess().StartTime

Wenn Sie Anwendungsdateien aktualisieren, wird die ASP.NET-Anwendung Hot-Reloaded innerhalb desselben Prozesses . Die App-Domäne wird neu geladen, ABER w3wp Prozess bleibt derselbe. Behalten Sie das im Hinterkopf.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X