.Net8的快速JIT,分層編譯,R2R的設定

江湖評談發表於2023-04-27

前言

本篇透過一些簡單的JIT設定,比如快速JIT,適用於迴圈的快速 JIT,分層編譯,R2R等核心內容設定,快速進入.Net8核心區域。


概括

1.快速JIT
什麼是快速JIT,顧名思義,被Rosyln編譯的.Net原始碼進行快速的機器碼編譯。這麼做的目的是,提高編譯的速度,但是降低了程式碼的效能和整體質量。適用於大型的編譯專案和對於效能並沒有太多要求的專案。

怎麼設定呢?比如你專案名稱為:TianXia。
可以透過修改你當前項路徑:

TianXia/bin/Debug/net8.0/TianXia.runtimeconfig.json檔案。在裡面新增如下程式碼:

{
   "runtimeOptions": {
      "configProperties": {
         "System.Runtime.TieredCompilation.QuickJit": true
      }
   }
}

2.快速迴圈JIT
顧名思義,你的程式碼裡面有迴圈的語句。那麼這個JIT配置就是,你是否在這個迴圈的語句裡面啟用快速JIT,以便於更快速的編譯這個迴圈語句。
這裡你可以透過修改字尾名為.csproj的專案檔案。用記事本開啟它,然後寫入以下語句:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>   <TieredCompilationQuickJitForLoops>true</TieredCompilationQuickJitForLoops>
  </PropertyGroup>
</Project>

3.分層編譯
分層編譯在.Net8裡面預設是開啟的,理論上不需要你開啟它。這裡也看下它是如何配置的。
你可以按照自己的平臺,新增以下環境變數:

# Windows
set DOTNET_TieredCompilation=1

# Powershell
$env:DOTNET_TieredCompilation="1"

# Unix
export DOTNET_TieredCompilation=1

4.R2R設定
R2R是判斷當程式碼執行的時候,是否使用有預編譯的程式碼,如果不使用,則強制JIT編譯。開啟則使用預編譯,這裡也看下它的設定:

set DOTNET_ReadyToRun=1

結尾

以上設定,在大型的.Net專案裡面或者伺服器專案裡面會進行很好的最佳化和效能釋放。
作者:江湖評談
參考:
https://learn.microsoft.com/zh-cn/dotnet/core/runtime-config/
https://learn.microsoft.com/zh-cn/dotnet/core/runtime-config/compilation

文章首發公眾號:jianghupt。歡迎關注,瞭解更多高階技術。
image

相關文章