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 -Etkin
false -Devre dışı
MSBuild özelliği TieredCompilation true -Etkin
false -Devre dışı
Ortam değişkeni COMPlus_TieredCompilation veya DOTNET_TieredCompilation 1 -Etkin
0 -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 -Etkin
false -Devre dışı
MSBuild özelliği TieredCompilationQuickJit true -Etkin
false -Devre dışı
Ortam değişkeni COMPlus_TC_QuickJit veya DOTNET_TC_QuickJit 1 -Etkin
0 -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 falseolarak 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 1olarak ayarlamakla eşdeğerdir.
Ayar adı Değerler
Ortam değişkeni COMPlus_ReadyToRun veya DOTNET_ReadyToRun 1 -Etkin
0 -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 -Etkin
0 -Devre dışı
MSBuild özelliği TieredPGO true -Etkin
false -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>