簡體   English   中英

Web站點第一次訪問時啟動時間異常長,(總共最長68秒)

[英]Web site takes unusually long time to start the first time it is accessed, (Up to 68 seconds in total)

我有一個 ASP.Net 應用程序,它在第一次訪問時需要很長時間才能啟動。 我做了一些跟蹤,發現在這個 function 中花費了 57 秒:

Boolean System.Web.Compilation.WebDirectoryBatchCompiler.CompileNonDependentBuildProviders(ICollection)

並且 function 依次調用以下 6 次:

Void System.Web.Compilation.WebDirectoryBatchCompiler.CompileAssemblyBuilder(AssemblyBuilder)

我的問題是System.Web.Compilation.WebDirectoryBatchCompiler.CompileAssemblyBuilder做什么? 我的 web 應用程序已經編譯,我不知道它為什么在啟動時進行任何類型的編譯工作。 這是正常的嗎? 有什么我不知道的事情嗎?

當 ASP.NET 應用程序啟動時,會發生相當多的引導。 這包括啟動工作進程、加載到AppDomain的程序集以及當前目錄中文件的編譯。 這個批量編譯過程是按文件夾進行的,這意味着如果我第一次請求/ ,批量編譯器將掃描文件夾以查找支持的類型,編譯它們並緩存結果。 這僅在根/文件夾中完成。 我對另一個/OffRoot文件夾的第一次請求將導致另一個批處理編譯。

如果您有一個預編譯的站點,運行時仍會執行這種類型的掃描,但會確定它不需要編譯任何內容。

預編譯的網站和編譯的 Web 應用程序之間有一個重要區別。 預編譯的網站會提前完成第一次編譯,因此它只需將程序集加載到需要的AppDomain中。 使用已編譯的 Web 應用程序,您已經編譯了基本源代碼,但未編譯視圖( .aspx )文件,因此它仍然進行首次編譯(動態編譯)。

AFAIK,ASP.NET 基於 .NET 服務世界。 當然,這意味着編譯實際上有兩個部分。 一種是您將源代碼編譯成 .NET 字節碼格式。 其次是實際轉換為適合在您的系統上實際運行的格式,通常以即時方式進行。 這與 Java 類似,盡管有很多較低級別的差異。

問題是它目前正在預先進行這種 JITting,這是設計使然。 讓 ASP.NET 應用程序啟動並運行可能需要一段時間,這是您看到的那一刻。 確實相信有一種方法可以在有人實際訪問該站點之前啟用預 JITting,但我不確定確切的方式。 希望有人會發布/鏈接到執行此操作的實際方法。

檢查 index.aspx 或 default.aspx 以查看是否有任何 web 應用程序。 有時查找文件需要時間,而編譯只需要第一次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM