Derleme için çalışma zamanı yapılandırma seçenekleri
Bu makalede,.NET derlemesini yapılandırmak için kullanabileceğiniz ayarlar ayrıntılı olarak anlatılır.
Not
.NET 6, .NET çalışma zamanı davranışını yapılandıran ortam değişkenleri yerine COMPlus_
ön eki DOTNET_
standartlaştırır. Ancak ön COMPlus_
ek çalışmaya devam eder. .NET çalışma zamanının önceki bir sürümünü kullanıyorsanız, ortam değişkenleri için ön eki kullanmaya COMPlus_
devam etmelisiniz.
Katmanlı derleme
- Tam zamanında (JIT) derleyicinin katmanlı derleme kullanıp kullanmayacağını yapılandırılır. Katmanlı derleme, yöntemleri iki katmandan geçirmektedir:
- İlk katman kodu daha hızlı oluşturur (hızlı JIT) veya önceden derlenmiş kodu (ReadyToRun) yükler.
- İkinci katman, arka planda iyileştirilmiş kod oluşturur ("JIT iyileştirme").
- .NET Core 3.0 ve sonraki sürümlerde katmanlı derleme varsayılan olarak etkinleştirilir.
- .NET Core 2.1 ve 2.2'de katmanlı derleme varsayılan olarak devre dışı bırakılır.
- Daha fazla bilgi için katmanlı derleme kılavuzuna bakın.
Ayar adı | Değerler | |
---|---|---|
runtimeconfig.json | System.Runtime.TieredCompilation |
true -Etkinfalse -Devre dışı |
MSBuild özelliği | TieredCompilation |
true -Etkinfalse -Devre dışı |
Ortam değişkeni | COMPlus_TieredCompilation veya DOTNET_TieredCompilation |
1 -Etkin0 -Devre dışı |
Örnekler
runtimeconfig.json dosyası:
{
"runtimeOptions": {
"configProperties": {
"System.Runtime.TieredCompilation": false
}
}
}
runtimeconfig.template.json dosyası:
{
"configProperties": {
"System.Runtime.TieredCompilation": false
}
}
Proje dosyası:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredCompilation>false</TieredCompilation>
</PropertyGroup>
</Project>
Hızlı JIT
- JIT derleyicisinin hızlı JIT kullanıp kullanmadığını yapılandırılır. Döngü içermeyen ve önceden derlenmiş kodun kullanılamadığı yöntemler için, hızlı JIT bunları daha hızlı ancak iyileştirmeler olmadan derler.
- Hızlı JIT'nin etkinleştirilmesi başlangıç süresini azaltır ancak performans özellikleri düşürülmüş kodlar üretebilir. Örneğin, kod daha fazla yığın alanı kullanabilir, daha fazla bellek ayırabilir ve daha yavaş çalışabilir.
- Hızlı JIT devre dışı bırakılır ancak katmanlı derleme etkinleştirilirse, katmanlı derlemeye yalnızca önceden derlenmiş kod katılır. Bir yöntem ReadyToRun ile önceden derlenmemişse, katmanlı derleme devre dışı bırakılmış gibi JIT davranışı aynıdır.
- .NET Core 3.0 ve sonraki sürümlerinde, hızlı JIT varsayılan olarak etkindir.
- .NET Core 2.1 ve 2.2'de hızlı JIT varsayılan olarak devre dışıdır.
Ayar adı | Değerler | |
---|---|---|
runtimeconfig.json | System.Runtime.TieredCompilation.QuickJit |
true -Etkinfalse -Devre dışı |
MSBuild özelliği | TieredCompilationQuickJit |
true -Etkinfalse -Devre dışı |
Ortam değişkeni | COMPlus_TC_QuickJit veya DOTNET_TC_QuickJit |
1 -Etkin0 -Devre dışı |
Örnekler
runtimeconfig.json dosyası:
{
"runtimeOptions": {
"configProperties": {
"System.Runtime.TieredCompilation.QuickJit": false
}
}
}
runtimeconfig.template.json dosyası:
{
"configProperties": {
"System.Runtime.TieredCompilation.QuickJit": false
}
}
Proje dosyası:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredCompilationQuickJit>false</TieredCompilationQuickJit>
</PropertyGroup>
</Project>
Döngüler için hızlı JIT
- JIT derleyicisinin döngü içeren yöntemlerde hızlı JIT kullanıp kullanmayacağını yapılandırılır.
- Döngüler için hızlı JIT'nin etkinleştirilmesi başlatma performansını artırabilir. Ancak, uzun süre çalışan döngüler uzun süreler için daha az iyileştirilmiş kodda takılabilir.
- Hızlı JIT devre dışı bırakılırsa, bu ayarın hiçbir etkisi olmaz.
- Bu ayarı atlarsanız, döngü içeren yöntemler için hızlı JIT kullanılmaz. Bu, değerini
false
olarak ayarlamakla eşdeğerdir.
Ayar adı | Değerler | |
---|---|---|
runtimeconfig.json | System.Runtime.TieredCompilation.QuickJitForLoops |
false -Devre dışıtrue -Etkin |
MSBuild özelliği | TieredCompilationQuickJitForLoops |
false -Devre dışıtrue -Etkin |
Ortam değişkeni | COMPlus_TC_QuickJitForLoops veya DOTNET_TC_QuickJitForLoops |
0 -Devre dışı1 -Etkin |
Örnekler
runtimeconfig.json dosyası:
{
"runtimeOptions": {
"configProperties": {
"System.Runtime.TieredCompilation.QuickJitForLoops": false
}
}
}
runtimeconfig.template.json dosyası:
{
"configProperties": {
"System.Runtime.TieredCompilation.QuickJitForLoops": false
}
}
Proje dosyası:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredCompilationQuickJitForLoops>true</TieredCompilationQuickJitForLoops>
</PropertyGroup>
</Project>
ReadyToRun
- .NET Core çalışma zamanının kullanılabilir ReadyToRun verilerine sahip görüntüler için önceden derlenmiş kod kullanıp kullanmayacağını yapılandırılır. Bu seçeneği devre dışı bırakmak çalışma zamanını JIT derleme çerçevesi koduna zorlar.
- Daha fazla bilgi için bkz . Çalıştırmaya Hazır.
- Bu ayarı atlarsanız, .NET kullanılabilir olduğunda ReadyToRun verilerini kullanır. Bu, değerini
1
olarak ayarlamakla eşdeğerdir.
Ayar adı | Değerler | |
---|---|---|
Ortam değişkeni | COMPlus_ReadyToRun veya DOTNET_ReadyToRun |
1 -Etkin0 -Devre dışı |
Profil destekli iyileştirme
Bu ayar ,NET 6 ve sonraki sürümlerde dinamik (katmanlı) profil destekli iyileştirmeyi (PGO) etkinleştirir.
Ayar adı | Değerler | |
---|---|---|
Ortam değişkeni | DOTNET_TieredPGO |
1 -Etkin0 -Devre dışı |
MSBuild özelliği | TieredPGO |
true -Etkinfalse -Devre dışı |
Profil destekli iyileştirme (PGO), JIT derleyicisinin en sık kullanılan türler ve kod yolları açısından iyileştirilmiş kod oluşturduğu yerdir. Dinamik PGO, katman 0 sırasında eklenen ek izlemelere göre kodu daha da iyileştirmek için katmanlı derleme ile el ele çalışır.
Örnekler
Proje dosyası:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredPGO>true</TieredPGO>
</PropertyGroup>
</Project>