以编程方式查找ASP.NET工作进程和应用程序域上次启动的时间?

在ASP.NET中:

  1. 如何判断ASP.NET工作进程上次重新启动的时间?

  2. 在ASP.NET中,如何判断应用程序域上次回收的时间?

对于工作进程,您可以通过编程方式从相应的perf读取Process – > Elapsed Time 。 counter(1)或直接来自System.Diagnostics.Process命名空间; 对于AppDomain ,您可以在启动时设置应用程序级变量作为基准并手动对其进行测量。

斯科特·米切尔实际上有几个好的post,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() + "
"); } Response.Write(DateTime.Now.Subtract((DateTime)Application["StartTime"]).ToString());

我也能够获得正确的PerfomanceCounter ,但似乎无法读取正确的值(在我的设置下始终为零):

 Response.Write(new PerformanceCounter("Process", "Elapsed Time", "WebDev.WebServer").NextValue() + "
");

Scott的文章绝对值得一读 – 在ProcessInfoProcessModelInfo (例如ProcessModelInfo.GetHistory )中有大量信息,但不幸的是它在Cassini上不可用:

只有在启用ASP.NET流程模型时,流程度量标准才可用。 在工作进程隔离模式下运行IIS 6或更高版本时,不支持此function。

更新:如何正确读取计数器以避免NextValue()上的零点的很好的解释: http : //blogs.msdn.com/b/bclteam/archive/2006/06/02/618156.aspx

HTH

(1) https://serverfault.com/questions/90927/lifetime-of-iis-worker-process-or-appdomai

(2) http://www.4guysfromrolla.com/articles/041002-1.aspx