Možnosti konfigurace modulu runtime pro kompilaci

Tento článek podrobně popisuje nastavení, která můžete použít ke konfiguraci kompilace .NET.

Poznámka:

.NET 6 standardizuje předponu DOTNET_ místo COMPlus_ proměnných prostředí, které konfigurují chování za běhu .NET. Předpona COMPlus_ ale bude i nadále fungovat. Pokud používáte předchozí verzi modulu runtime .NET, měli byste stále používat předponu COMPlus_ pro proměnné prostředí.

Vrstvené kompilace

  • Konfiguruje, jestli kompilátor JIT (just-in-time) používá vrstvenou kompilaci. Vrstvené přechody kompilace metody prostřednictvím dvou vrstev:
    • První vrstva generuje kód rychleji (rychlý JIT) nebo načítá předem zkompilovaný kód (ReadyToRun).
    • Druhá úroveň generuje optimalizovaný kód na pozadí ("optimalizace JIT").
  • V .NET Core 3.0 a novějších verzích je ve výchozím nastavení povolená vrstvené kompilace.
  • V .NET Core 2.1 a 2.2 je ve výchozím nastavení vrstvené kompilace zakázaná.
  • Další informace najdete v průvodci vrstvenou kompilací.
Název nastavení Hodnoty
runtimeconfig.json System.Runtime.TieredCompilation true -Povoleno
false -Zakázán
Vlastnost MSBuild TieredCompilation true -Povoleno
false -Zakázán
Proměnná prostředí COMPlus_TieredCompilation nebo DOTNET_TieredCompilation 1 -Povoleno
0 -Zakázán

Příklady

runtimeconfig.json soubor:

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

runtimeconfig.template.json soubor:

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

Soubor projektu:

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

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

</Project>

Rychlý JIT

  • Konfiguruje, jestli kompilátor JIT používá rychlé JIT. U metod, které neobsahují smyčky a pro které není předkompilovaný kód k dispozici, je rychlý JIT zkompiluje rychleji, ale bez optimalizace.
  • Povolení rychlého JIT zkracuje dobu spuštění, ale může vytvořit kód s degradovanými charakteristikami výkonu. Například kód může používat více prostoru zásobníku, přidělit více paměti a běžet pomaleji.
  • Pokud je funkce JIT zakázaná, ale je povolená vrstvené kompilace, účastní se vrstvené kompilace pouze předkompilovaný kód. Pokud metoda není předem zkompilována s ReadyToRun, chování JIT je stejné, jako kdyby vrstvené kompilace byla zakázána.
  • V .NET Core 3.0 a novějších je ve výchozím nastavení povolený rychlý JIT.
  • V .NET Core 2.1 a 2.2 je ve výchozím nastavení rychlý JIT zakázaný.
Název nastavení Hodnoty
runtimeconfig.json System.Runtime.TieredCompilation.QuickJit true -Povoleno
false -Zakázán
Vlastnost MSBuild TieredCompilationQuickJit true -Povoleno
false -Zakázán
Proměnná prostředí COMPlus_TC_QuickJit nebo DOTNET_TC_QuickJit 1 -Povoleno
0 -Zakázán

Příklady

runtimeconfig.json soubor:

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

runtimeconfig.template.json soubor:

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

Soubor projektu:

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

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

</Project>

Rychlé JIT pro smyčky

  • Konfiguruje, zda kompilátor JIT používá rychlé JIT u metod obsahujících smyčky.
  • Povolení rychlého JIT pro smyčky může zlepšit výkon při spuštění. Dlouho běžící smyčky se ale můžou po dlouhou dobu zaseknout v méně optimalizovaném kódu.
  • Pokud je funkce JIT zakázaná, toto nastavení nemá žádný vliv.
  • Pokud toto nastavení vynecháte, rychlé JIT se nepoužívá pro metody, které obsahují smyčky. To je ekvivalentní nastavení hodnoty na false.
Název nastavení Hodnoty
runtimeconfig.json System.Runtime.TieredCompilation.QuickJitForLoops false -Zakázán
true -Povoleno
Vlastnost MSBuild TieredCompilationQuickJitForLoops false -Zakázán
true -Povoleno
Proměnná prostředí COMPlus_TC_QuickJitForLoops nebo DOTNET_TC_QuickJitForLoops 0 -Zakázán
1 -Povoleno

Příklady

runtimeconfig.json soubor:

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

runtimeconfig.template.json soubor:

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

Soubor projektu:

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

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

</Project>

ReadyToRun

  • Konfiguruje, jestli modul runtime .NET Core používá předkompilovaný kód pro image s dostupnými daty ReadyToRun. Zakázáním této možnosti se modul runtime vynutí kód architektury JIT-compile.
  • Další informace najdete v tématu Připraveno ke spuštění.
  • Pokud toto nastavení vynecháte, použije .NET data ReadyToRun, pokud je k dispozici. To je ekvivalentní nastavení hodnoty na 1.
Název nastavení Hodnoty
Proměnná prostředí COMPlus_ReadyToRun nebo DOTNET_ReadyToRun 1 -Povoleno
0 -Zakázán

Optimalizace na základě profilu

Toto nastavení umožňuje dynamickou (vrstvenou) optimalizaci profilu (PGO) v .NET 6 a novějších verzích.

Název nastavení Hodnoty
Proměnná prostředí DOTNET_TieredPGO 1 -Povoleno
0 -Zakázán
Vlastnost MSBuild TieredPGO true -Povoleno
false -Zakázán

Optimalizace s asistencí profilu (PGO) je místo, kde kompilátor JIT generuje optimalizovaný kód z hlediska typů a cest kódu, které se nejčastěji používají. Dynamické PGO funguje ručně s vrstvenou kompilací pro další optimalizaci kódu na základě další instrumentace, která je zavedená během vrstvy 0.

Příklady

Soubor projektu:

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

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

</Project>