Asp.net

IIS7 上的 ASP.NET 應用程序 - iisreset 後啟動速度很慢

  • June 11, 2020

我有一個在 Windows 2008 的 IIS7 下執行的 ASP.NET 3.5 網站。

當我重新啟動 IIS (iisreset),然後點擊一個頁面時,初始啟動真的很慢。

我在 Process Explorer 中看到以下活動:

  • w3wp.exe 生成,但顯示 0% CPU 活動約 60 秒
  • 最後,w3wp.exe 進入 50% CPU 大約 5 秒,然後頁面載入。

在此期間,我也沒有看到任何其他程序使用 CPU。它基本上只是掛起。

這段時間發生了什麼?我怎樣才能追踪到所有這些時間都在花費甚麼?

我們遇到了類似的問題,結果是 Windows 超時檢查簽名證書的撤銷。檢查您的伺服器是否正在嘗試呼叫某處(例如 crl.microsoft.com)。也許您的代理設置不正確?還是擋路的防火牆?我們最終確定我們對伺服器有足夠的控制權並且不想“打電話回家”,所以我們只是禁用了檢查。您可以使用 .NET 2.0 SP1 及更高版本執行此操作,方法是將以下內容添加到 machine.config。

<runtime> <generatePublisherEvidence enabled="false"/> </runtime>

我不確定你是否可以把它放在你的 app.config/web.config 中。

IL 正在被 Just-In-Time 編譯器轉換為機器本機程式碼(Assembly),您可以等待所有魔法發生。

將原始碼編譯為託管程式碼時,編譯器會將原始碼翻譯為 Microsoft 中間語言 (MSIL)。這是一組獨立於 CPU 的指令,可以有效地轉換為本機程式碼。Microsoft 中間語言 (MSIL) 是一種翻譯,用作許多編譯器的輸出。它是即時 (JIT) 編譯器的輸入。公共語言執行時包括一個用於將 MSIL 轉換為本機程式碼的 JIT 編譯器。

在執行 Microsoft 中間語言 (MSIL) 之前,必須由 .NET Framework 即時 (JIT) 編譯器將其轉換為本機程式碼。這是在與 JIT 編譯器相同的電腦體系結構上執行的特定於 CPU 的程式碼。而不是使用時間和記憶體將可移植可執行 (PE) 文件中的所有 MSIL 轉換為本機程式碼。它在執行時根據需要轉換 MSIL,然後記憶體生成的本機程式碼,以便任何後續呼叫都可以訪問它。

來源

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