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

时间:2010-10-30 00:04:27

标签: c# asp.net iis appdomain worker-process

在ASP.NET中:

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

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

1 个答案:

答案 0 :(得分:3)

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

实际上,Scott Mitchell在这方面有几个好的帖子,8年后仍然相关,信不信由你(2)。在Cassini上运行(Vista,VS 2008),我看到了准确的系统正常运行时间:

TimeSpan.FromMilliseconds(Environment.TickCount)

...准确的进程/ 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/>");

Scott的文章绝对值得一读 - ProcessInfo ProcessModelInfo (例如 ProcessModelInfo.GetHistory )中有大量信息,但是不幸的是,它不适用于卡西尼号:

  

流程指标仅供参考   当ASP.NET进程模型是   启用。在版本上运行时   IIS 6或更新的工作进程   隔离模式,此功能不是   支撑。

<强>更新 如何正确读取计数器以避免零点 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