減少應用程序啟動時間
當您構建 .NET 應用程序時,它會被編譯成 Microsoft 中間語言 (MSIL)。當用戶啟動應用程序時,其 MSIL 代碼由“即時” (JIT) 編譯器編譯成機器代碼。此過程可能會導致明顯的延遲。除了您自己的應用程序之外,還可以加載外部 DLL(例如 DevExpress DLL),這意味著任何延遲都不僅僅取決于代碼的大小。
本主題介紹如果由于 JIT 編譯而導致應用程序出現明顯延遲,如何減少 WPF 或 WinForms 應用程序啟動時間。
.NET 框架
將 IL 代碼編譯為本機代碼
使用Native Image Generator (Ngen.exe)工具將程序集的 IL 代碼編譯為本機代碼。當最終用戶運行您的應用程序時,CLR 從本機圖像緩存加載預編譯代碼,因此在運行時不需要編譯。Ngen.exe工具隨 .NET Framework SDK 一起提供。
您可以將應用程序的 IL 代碼(及其依賴項的 IL 代碼)編譯為本機代碼,如下所示:
X86
C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe install C:\MyApp.exe
X64
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe install C:\MyApp.exe
部署應用程序后運行Ngen.exe 。
下一代。exe生成的代碼不如 JIT 編譯器生成的代碼高度優化。
有關各種本機映像生成功能的信息,請參閱以下文章:Ngen.exe(本機映像生成器)。
使用多核 JIT
在 .NET Framework 4.5 及更高版本中,您可以使用System.Runtime.ProfileOptimization類來啟用多核 JIT。多核 JIT使用并行化來減少應用程序啟動期間的 JIT 編譯時間。
筆記
使用多核 JIT 不如將 IL 代碼編譯為本機代碼有效。
下面的代碼示例演示了如何在您的應用程序中啟用多核 JIT。
public App() { // Defines where to store JIT profiles ProfileOptimization.SetProfileRoot(@"C:\MyAppFolder"); // Enables Multicore JIT with the specified profile ProfileOptimization.StartProfile("Startup.Profile"); }
應用程序第一次啟動時,JIT 編譯器會記錄它應該編譯的每個方法。然后 CLR 保存已執行方法的概要文件。ProfileOptimization.SetProfileRoot方法指定保存配置文件的現有文件夾。目前未應用多核 JIT。
應用程序第二次運行時,ProfileOptimization.StartProfile方法從磁盤加載指定的配置文件,并使用此信息在后臺編譯方法,然后再從主線程調用它們。
有關詳細信息,請參閱以下文章:
NET Core - 準備運行圖像
.NET/.NET Core允許您通過將應用程序編譯為ReadyToRun (R2R)格式來減少應用程序啟動時間。
R2R 二進制文件包含類似于即時 (JIT) 編譯器生成的本機代碼。本機代碼用于減少 JIT 編譯器在加載應用程序時需要執行的工作量。
要以 R2R 格式發布應用程序,請在項目文件中將<PublishReadyToRun>選項設置為:true
<PropertyGroup>
<PublishReadyToRun>true</PublishReadyToRun>
</PropertyGroup>
R2R 二進制文件更大,因為它們包含本機代碼和 IL 代碼。
有關詳細信息,請參閱以下主題:部署 .NET/.NET Core 應用程序。
本文來自博客園,作者:jevan,轉載請注明原文鏈接:http://www.rzrgm.cn/DoNetCShap/p/16400889.html

浙公網安備 33010602011771號