Bagikan melalui


Opsi konfigurasi runtime untuk kompilasi

Artikel ini merinci pengaturan yang dapat Anda gunakan untuk mengonfigurasi kompilasi .NET.

Kompilasi berjenjang

  • Mengonfigurasi apakah pengkompilasi just-in-time (JIT) menggunakan kompilasi berjenjang. Metode transisi kompilasi berjenjang melalui dua tingkatan:
    • Tingkat pertama menghasilkan kode dengan lebih cepat (JIT cepat) atau memuat kode yang telah dikompilasi sebelumnya (ReadyToRun).
    • Tingkat kedua menghasilkan kode yang dioptimalkan di latar belakang ("mengoptimalkan JIT").
  • Di .NET Core 3.0 dan yang lebih baru, kompilasi berjenjang diaktifkan secara default.
  • Di .NET Core 2.1 dan 2.2, kompilasi berjenjang dinonaktifkan secara default.
  • Untuk informasi selengkapnya, lihat panduan kompilasi berjenjang.
Nama setelan Nilai
runtimeconfig.json System.Runtime.TieredCompilation true - diaktifkan
false - dinonaktifkan
Properti MSBuild TieredCompilation true - diaktifkan
false - dinonaktifkan
Variabel lingkungan DOTNET_TieredCompilation 1 - diaktifkan
0 - dinonaktifkan

Examples

File runtimeconfig.json:

{
   "runtimeOptions": {
      "configProperties": {
         "System.Runtime.TieredCompilation": false
      }
   }
}

file runtimeconfig.template.json:

{
   "configProperties": {
      "System.Runtime.TieredCompilation": false
   }
}

File proyek:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TieredCompilation>false</TieredCompilation>
  </PropertyGroup>

</Project>

JIT Cepat

  • Mengonfigurasi apakah pengkompilasi JIT menggunakan JIT cepat. Untuk metode yang tidak berisi perulangan dan kode yang telah dikompilasi sebelumnya tidak tersedia, JIT cepat mengkompilasinya lebih cepat tetapi tanpa pengoptimalan.
  • Mengaktifkan JIT cepat mengurangi waktu mulai tetapi dapat menghasilkan kode dengan karakteristik performa yang terdegradasi. Misalnya, kode dapat menggunakan lebih banyak ruang tumpukan, mengalokasikan lebih banyak memori, dan menjalankan lebih lambat.
  • Jika JIT cepat dinonaktifkan tetapi kompilasi berjenjang diaktifkan, hanya kode yang dikompilasi sebelumnya yang berpartisipasi dalam kompilasi berjenjang. Jika metode tidak dikompilasi sebelumnya dengan ReadyToRun, perilaku JIT sama seperti jika kompilasi berjenjang dinonaktifkan.
  • Di .NET Core 3.0 dan yang lebih baru, JIT cepat diaktifkan secara default.
  • Di .NET Core 2.1 dan 2.2, JIT cepat dinonaktifkan secara default.
Nama setelan Nilai
runtimeconfig.json System.Runtime.TieredCompilation.QuickJit true - diaktifkan
false - dinonaktifkan
Properti MSBuild TieredCompilationQuickJit true - diaktifkan
false - dinonaktifkan
Variabel lingkungan DOTNET_TC_QuickJit 1 - diaktifkan
0 - dinonaktifkan

Examples

File runtimeconfig.json:

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

file runtimeconfig.template.json:

{
   "configProperties": {
      "System.Runtime.TieredCompilation.QuickJit": false
   }
}

File proyek:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TieredCompilationQuickJit>false</TieredCompilationQuickJit>
  </PropertyGroup>

</Project>

JIT cepat untuk perulangan

  • Mengonfigurasi apakah pengkompilasi JIT menggunakan JIT cepat pada metode yang berisi perulangan.
  • Mengaktifkan JIT cepat untuk perulangan dapat meningkatkan performa startup. Namun, perulangan jangka panjang bisa terjebak dalam kode yang kurang dioptimalkan untuk jangka panjang.
  • Jika JIT cepat dinonaktifkan, pengaturan ini tidak berpengaruh.
  • Jika Anda menghilangkan pengaturan ini, JIT cepat tidak digunakan untuk metode yang berisi perulangan. Ini sama dengan mengatur nilai ke false.
Nama setelan Nilai
runtimeconfig.json System.Runtime.TieredCompilation.QuickJitForLoops false - dinonaktifkan
true - diaktifkan
Properti MSBuild TieredCompilationQuickJitForLoops false - dinonaktifkan
true - diaktifkan
Variabel lingkungan DOTNET_TC_QuickJitForLoops 0 - dinonaktifkan
1 - diaktifkan

Examples

File runtimeconfig.json:

{
   "runtimeOptions": {
      "configProperties": {
         "System.Runtime.TieredCompilation.QuickJitForLoops": false
      }
   }
}

file runtimeconfig.template.json:

{
   "configProperties": {
      "System.Runtime.TieredCompilation.QuickJitForLoops": false
   }
}

File proyek:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TieredCompilationQuickJitForLoops>true</TieredCompilationQuickJitForLoops>
  </PropertyGroup>

</Project>

ReadyToRun

  • Mengonfigurasi apakah runtime .NET menggunakan kode yang telah dikompilasi sebelumnya untuk gambar dengan data ReadyToRun yang tersedia. Menonaktifkan opsi ini memaksa runtime ke kode kerangka kerja kompilasi JIT.
  • Untuk informasi selengkapnya, lihat Siap Dijalankan.
  • Jika Anda menghilangkan pengaturan ini, .NET menggunakan data ReadyToRun saat tersedia. Ini sama dengan mengatur nilai ke 1.
Nama setelan Nilai
Variabel lingkungan DOTNET_ReadyToRun 1 - diaktifkan
0 - dinonaktifkan

Pengoptimalan yang dipandu profil

Pengaturan ini memungkinkan pengoptimalan yang dipandu profil (PGO) dinamis (berjenjang) di .NET 6 dan versi yang lebih baru.

Nama setelan Nilai
Variabel lingkungan DOTNET_TieredPGO 1 - diaktifkan
0 - dinonaktifkan
Properti MSBuild TieredPGO true - diaktifkan
false - dinonaktifkan

Pengoptimalan yang dipandu profil (PGO) adalah tempat pengompilasi JIT menghasilkan kode yang dioptimalkan dalam hal jenis dan jalur kode yang paling sering digunakan. Dinamis PGO bekerja sama dengan kompilasi berjenjang untuk lebih mengoptimalkan kode berdasarkan instrumentasi tambahan yang diberlakukan selama tingkat 0.

Examples

File proyek:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TieredPGO>true</TieredPGO>
  </PropertyGroup>

</Project>