1

我正在开发一个 ASP.NET 应用程序并缓存一些参考数据。创建缓存的代码在 global.asax 中的 application_start 事件中调用。我的问题是 application_start 事件被多次调用,这减慢了应用程序的访问速度。为了测试这个问题,我重新安装了应用程序。application_start 事件在首次访问应用程序时触发(如预期的那样),并且在大约一个小时内再次触发,即使我没有进行任何更改。我没有在应用程序的 bin 文件中进行任何文件系统更改,并且应用程序池设置为默认回收设置(1740 分钟),所以我不确定为什么要调用该事件。

谢谢

4

2 回答 2

4

我会检查空闲超时设置(默认为 20 分钟)。如果站点在 20 分钟内没有处理任何请求,则工作进程将关闭,因此下次您运行该应用程序时,您将收到另一个 App Start 事件。

于 2011-07-14T18:06:22.763 回答
1

您可以在 Global.asax.cs 的 Application_End 方法中记录重启原因,我正在使用此代码:

protected void Application_End(object sender, EventArgs e)
{
  HttpRuntime runtime = (HttpRuntime)typeof(System.Web.HttpRuntime).InvokeMember("_theRuntime", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.GetField, null, null, null);

  string shutDownMessage = "";

  if (runtime != null)
  {
    shutDownMessage = Environment.NewLine + "Shutdown: " +
                      (string)runtime.GetType().InvokeMember("_shutDownMessage", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField, null, runtime, null) + 
                      Environment.NewLine + "Stack: " + Environment.NewLine +
                      (string)runtime.GetType().InvokeMember("_shutDownStack", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField, null, runtime, null);
  }
}
于 2011-07-14T18:08:00.720 回答