4

在 ASP.NET 中:

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

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

4

1 回答 1

3

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

Scott Mitchell 实际上有几个关于这方面的好帖子,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/>");

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

仅当启用 ASP.NET 进程模型时,进程度量才可用。在工作进程隔离模式下在 IIS 6 或更高版本上运行时,不支持此功能。

更新: 很好地解释了如何正确读取计数器以避免NextValue()上的零:链接

高温高压

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

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

于 2010-10-30T15:20:34.703 回答