2011-07-14 54 views
1

我正在研究ASP.NET应用程序并缓存一些参考数据。创建缓存的代码在global.asax的application_start事件中调用。我的问题是多次调用application_start事件会降低应用程序访问速度。为了测试这个问题,我重新安装了应用程序。 application_start事件在第一次访问应用程序时触发(按预期),并在大约一个小时内再次启动,尽管我没有做任何更改。我没有在应用程序的bin文件中进行任何文件系统更改,并且应用程序池被设置为默认回收设置(1740分钟),所以我不确定为什么该事件被调用。已解决ASP.NET application_start事件

谢谢

+0

您是否尝试过在你的Global.asax添加“Application_End”和设置断点?您可以抓取到达的堆栈跟踪,然后将其发布到此处。 – BumbleB2na

回答

4

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

+0

你说得对。我在应用程序池设置中将空闲超时设置为零,并解决了问题 – klone

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); 
    } 
}