Opsi konfigurasi runtime untuk kompilasi
Artikel ini merinci pengaturan yang dapat Anda gunakan untuk mengonfigurasi kompilasi .NET.
Catatan
.NET 6 menstandarkan pada prefiks DOTNET_
daripada COMPlus_
untuk variabel lingkungan yang mengonfigurasi perilaku run-time .NET. Namun, prefiks COMPlus_
akan terus berfungsi. Jika Anda menggunakan versi runtime .NET sebelumnya, Anda masih harus menggunakan prefiks COMPlus_
untuk variabel lingkungan.
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 pengaturan | Nilai | |
---|---|---|
runtimeconfig.json | System.Runtime.TieredCompilation |
true - diaktifkanfalse - dinonaktifkan |
Properti MSBuild | TieredCompilation |
true - diaktifkanfalse - dinonaktifkan |
Variabel lingkungan | COMPlus_TieredCompilation atau DOTNET_TieredCompilation |
1 - diaktifkan0 - dinonaktifkan |
Contoh
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 pengaturan | Nilai | |
---|---|---|
runtimeconfig.json | System.Runtime.TieredCompilation.QuickJit |
true - diaktifkanfalse - dinonaktifkan |
Properti MSBuild | TieredCompilationQuickJit |
true - diaktifkanfalse - dinonaktifkan |
Variabel lingkungan | COMPlus_TC_QuickJit atau DOTNET_TC_QuickJit |
1 - diaktifkan0 - dinonaktifkan |
Contoh
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 pengaturan | Nilai | |
---|---|---|
runtimeconfig.json | System.Runtime.TieredCompilation.QuickJitForLoops |
false - dinonaktifkantrue - diaktifkan |
Properti MSBuild | TieredCompilationQuickJitForLoops |
false - dinonaktifkantrue - diaktifkan |
Variabel lingkungan | COMPlus_TC_QuickJitForLoops atau DOTNET_TC_QuickJitForLoops |
0 - dinonaktifkan1 - diaktifkan |
Contoh
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 Core 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 pengaturan | Nilai | |
---|---|---|
Variabel lingkungan | COMPlus_ReadyToRun atau DOTNET_ReadyToRun |
1 - diaktifkan0 - dinonaktifkan |
Pengoptimalan yang dipandu profil
Pengaturan ini memungkinkan pengoptimalan yang dipandu profil (PGO) dinamis (berjenjang) di .NET 6 dan versi yang lebih baru.
Nama pengaturan | Nilai | |
---|---|---|
Variabel lingkungan | DOTNET_TieredPGO |
1 - diaktifkan0 - dinonaktifkan |
Properti MSBuild | TieredPGO |
true - diaktifkanfalse - dinonaktifkan |
Pengoptimalan yang dipandu profil (PGO) adalah tempat pengompilasi JIT menghasilkan kode yang dioptimalkan dalam hal jenis dan jalur kode yang paling sering digunakan. PGO dinamis bekerja bersama dengan kompilasi berjenjang untuk lebih mengoptimalkan kode berdasarkan instrumentasi tambahan yang diberlakukan selama tingkat 0.
Contoh
File proyek:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredPGO>true</TieredPGO>
</PropertyGroup>
</Project>