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 -Povolenofalse -Zakázán |
Vlastnost MSBuild | TieredCompilation |
true -Povolenofalse -Zakázán |
Proměnná prostředí | COMPlus_TieredCompilation nebo DOTNET_TieredCompilation |
1 -Povoleno0 -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 -Povolenofalse -Zakázán |
Vlastnost MSBuild | TieredCompilationQuickJit |
true -Povolenofalse -Zakázán |
Proměnná prostředí | COMPlus_TC_QuickJit nebo DOTNET_TC_QuickJit |
1 -Povoleno0 -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ántrue -Povoleno |
Vlastnost MSBuild | TieredCompilationQuickJitForLoops |
false -Zakázántrue -Povoleno |
Proměnná prostředí | COMPlus_TC_QuickJitForLoops nebo DOTNET_TC_QuickJitForLoops |
0 -Zakázán1 -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 -Povoleno0 -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 -Povoleno0 -Zakázán |
Vlastnost MSBuild | TieredPGO |
true -Povolenofalse -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>