2011-07-14 56 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); 
    } 
}