Для рабочего процесса вы можете программно прочитать Процесс -> Истекшее время из соответствующего перфоратора. счетчик (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 ) есть масса информации, но, к сожалению, это доступно на Кассини:
Метрики процесса доступны только
когда модель процесса ASP.NET
включен. При работе на версиях
IIS 6 или новее в рабочем процессе
Режим изоляции, эта функция не
поддерживается.
UPDATE:
отличное объяснение того, как правильно считать счетчик, чтобы избежать нуля при 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
(2) http://www.4guysfromrolla.com/articles/041002-1.aspx