Dot-Net
最小化 asp.net 的啟動時間
我在 IIS 中執行了多個 Web 服務 (WCF)。當服務是熱的(載入)時,典型的請求大約需要 0.5 秒才能完成。但是,當應用程序不是熱啟動(冷啟動)時,第一次命中需要大約 20 秒才能啟動並執行服務。發生應用程序池回收時也會發生同樣的情況。
我希望減少此 Web 服務的冷啟動時間。我已經執行的一些操作是:
- 配置應用程序池,使其在 20 分鐘空閒時間後不回收(以便應用程序保持溫暖)。這最大限度地減少了冷啟動的發生,但不會使冷啟動更快。應用程序池回收現在受到限制,但仍會發生。
- 修改了machine.config,
像這樣:
<runtime> <!-- see http://msdn.microsoft.com/en-us/library/bb629393(v=vs.90).aspx --> <generatePublisherEvidence enabled="false"/> </runtime>這將啟動時間從 20 秒減少到大約 10 秒。
- 我嘗試使用
NGEN預編譯程序集,像這樣
for %d in (*.dll) do ngen install %d這不會減少啟動時間(只會增加部署的複雜性)。
我真的很想進一步減少冷啟動時間。我有什麼選擇可以做到這一點?
(附帶說明:找出啟動期間時間花在哪裡的最佳方法是什麼?我如何監控正在發生的事情?)
更新
我已經用
procmon. 啟動時間似乎不是一個單一的原因,它是一大堆小時間片(程序啟動、載入、網路執行時、讀取配置、載入程序集等)加起來總時間。
我在這篇文章中找到的策略很幸運。它使應用程序保持活動狀態,因此一旦它執行,您就不會有任何冷啟動(除非 IIS 或機器實際上是故意重新啟動或由於重大錯誤而重新啟動)。無論任何活動,該應用程序都會保持自身活力。
這篇文章是關於安排每隔一段時間發生的事情,但如果你的唯一目標是讓應用程序保持活力,你可以跳過這部分。