Программно найти, когда рабочий процесс ASP.NET и домен приложения последний раз запускались?
В ASP.NET:
Как узнать, когда рабочий процесс ASP.NET последний раз перезапускался?
В ASP.NET как узнать, когда домен приложения последний раз перерабатывался?
1 ответ
Для рабочего процесса вы можете программно прочитать Process -> Elapsed Time из соответствующего перфекта. counter (1) или непосредственно из пространства имен System.Diagnostics.Process; для AppDomain вы можете установить переменную уровня приложения при запуске, чтобы служить в качестве базовой линии и измерять ее вручную.
На самом деле у Скотта Митчелла есть пара хороших постов, которые по-прежнему актуальны 8 лет спустя, хотите верьте, хотите нет (2). Работая на Cassini (Vista, VS 2008), я вижу точное время работы системы:
TimeSpan.FromMilliseconds(Environment.TickCount)
... и точное время работы Process/AppDomain с этими:
foreach (Process p in Process.GetProcessesByName("WebDev.WebServer"))
{
Response.Write(DateTime.Now.Subtract(p.StartTime).ToString() + "<br/>");
}
Response.Write(DateTime.Now.Subtract((DateTime)Application["StartTime"]).ToString());
Я также могу получить правильный PerfomanceCounter, но, похоже, не могу прочитать правильное значение (всегда ноль, в моих настройках):
Response.Write(new PerformanceCounter("Process", "Elapsed Time", "WebDev.WebServer").NextValue() + "<br/>");
Статьи Скотта определенно стоит прочитать - в ProcessInfo и ProcessModelInfo есть много информации (например, ProcessModelInfo.GetHistory), но, к сожалению, она недоступна в Cassini:
Показатели процесса доступны только при включенной модели процесса ASP.NET. При работе в версиях IIS 6 или новее в режиме изоляции рабочих процессов эта функция не поддерживается.
ОБНОВЛЕНИЕ: отличное объяснение того, как правильно считать счетчик, чтобы избежать нуля в NextValue (): http://blogs.msdn.com/b/bclteam/archive/2006/06/02/618156.aspx
НТН
(1) https://serverfault.com/questions/90927/lifetime-of-iis-worker-process-or-appdomai