Asp.net-Mvc-3

如何避免將緩慢的 Application_Start 時間傳遞給 ASP.NET 中的最終使用者

  • July 30, 2012

由於在啟動時發生了很多 IoC 事情,我的 Application_Start 速度很慢。

我要解決的問題是,如何避免將啟動時間傳遞給最終使用者?

假設

我的應用程序託管在 AppHarbor 上,因此我無法訪問 IIS。但是,即使我這樣做了,我的研究是讓應用程序池回收是最佳實踐,因此無法避免 Application_Start 定期執行(我認為在 AppHarbor 上每 20 分鐘執行一次)。

我的想法來解決它

最初我以為我會每分鐘或某事都擊中它,但這似乎太暴力了,它甚至可能無法阻止使用者體驗緩慢的啟動。

我目前的解決方案是處理 Application_End 事件,然後立即點擊應用程序使其再次啟動,因此希望不會影響任何使用者。

有沒有更好的方法來解決這個問題?

不幸的是,當您使用 InProcess 會話狀態時,較長的會話超時不會阻止 IIS 應用程序池回收。

您是否考慮過延遲載入(某些)您的依賴項?SimpleInjector 有關於如何做到這一點的文件,它應該適用於大多數其他 IoC:

Simple Injector \ Documentation \ How To \ Register Factory Delegates \ Working With Lazy Factory

在我的理解中,為了防止啟動時間傳播給使用者,你應該避免回收應用程序池,你可以使用IIS 應用程序池超時設置,這些可以通過 web.config 進行調整,而不僅僅是通過 IIS 控制台。此外,您可以在此 SO quretion 上閱讀更多內容。您可能不需要 Application_End hacks 來實現這一點。

更新:我發現了另一件有趣的事情,可以幫助你,檢查這個IIS 應用程序初始化擴展,它可以用來在工作程序啟動時預載入依賴項。它可以幫助您改善客戶體驗。看看這個。

引用自:https://stackoverflow.com/questions/11606935