Aracılığıyla paylaş


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.

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ın adı Değerler
runtimeconfig.json System.Runtime.TieredCompilation true -Etkin
false -sakat
MSBuild özelliği TieredCompilation true -Etkin
false -sakat
Ortam değişkeni DOTNET_TieredCompilation 1 -Etkin
0 -sakat

Ö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ın adı Değerler
runtimeconfig.json System.Runtime.TieredCompilation.QuickJit true -Etkin
false -sakat
MSBuild özelliği TieredCompilationQuickJit true -Etkin
false -sakat
Ortam değişkeni DOTNET_TC_QuickJit 1 -Etkin
0 -sakat

Ö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ın adı Değerler
runtimeconfig.json System.Runtime.TieredCompilation.QuickJitForLoops false -sakat
true -Etkin
MSBuild özelliği TieredCompilationQuickJitForLoops false -sakat
true -Etkin
Ortam değişkeni DOTNET_TC_QuickJitForLoops 0 -sakat
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 ç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ın adı Değerler
Ortam değişkeni DOTNET_ReadyToRun 1 -Etkin
0 -sakat

Profil destekli iyileştirme

Bu ayar ,NET 6 ve sonraki sürümlerde dinamik (katmanlı) profil destekli iyileştirmeyi (PGO) etkinleştirir.

Ayarın adı Değerler
Ortam değişkeni DOTNET_TieredPGO 1 -Etkin
0 -sakat
MSBuild özelliği TieredPGO true -Etkin
false -sakat

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 iyi hale getirmek için katmanlı derleme ile el ele çalışır.

Örnekler

Proje dosyası:

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

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

</Project>