Konfigurationsalternativ för körning för kompilering
Den här artikeln beskriver de inställningar som du kan använda för att konfigurera .NET-kompilering.
Kommentar
.NET 6 standardiserar på prefixet DOTNET_
i stället COMPlus_
för för miljövariabler som konfigurerar .NET-körningsbeteende. Prefixet COMPlus_
fortsätter dock att fungera. Om du använder en tidigare version av .NET-körningen bör du fortfarande använda prefixet COMPlus_
för miljövariabler.
Nivåindelad kompilering
- Konfigurerar om jit-kompilatorn (just-in-time) använder nivåindelad kompilering. Nivåindelade kompileringsövergångar metoder via två nivåer:
- Den första nivån genererar kod snabbare (snabb JIT) eller läser in förkompilerad kod (ReadyToRun).
- Den andra nivån genererar optimerad kod i bakgrunden ("optimera JIT").
- I .NET Core 3.0 och senare aktiveras nivåindelad kompilering som standard.
- I .NET Core 2.1 och 2.2 inaktiveras nivåindelad kompilering som standard.
- Mer information finns i kompileringsguiden för nivåindelad nivå.
Inställningsnamn | Värden | |
---|---|---|
runtimeconfig.json | System.Runtime.TieredCompilation |
true -Aktiveratfalse -Inaktiverad |
MSBuild-egenskap | TieredCompilation |
true -Aktiveratfalse -Inaktiverad |
Miljövariabel | COMPlus_TieredCompilation eller DOTNET_TieredCompilation |
1 -Aktiverat0 -Inaktiverad |
Exempel
runtimeconfig.json fil:
{
"runtimeOptions": {
"configProperties": {
"System.Runtime.TieredCompilation": false
}
}
}
runtimeconfig.template.json fil:
{
"configProperties": {
"System.Runtime.TieredCompilation": false
}
}
Projektfil:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredCompilation>false</TieredCompilation>
</PropertyGroup>
</Project>
Snabb JIT
- Konfigurerar om JIT-kompilatorn använder snabb JIT. För metoder som inte innehåller loopar och för vilka förkompilerad kod inte är tillgänglig, kompilerar snabb JIT dem snabbare men utan optimeringar.
- Aktivering av snabb JIT minskar starttiden men kan generera kod med försämrade prestandaegenskaper. Koden kan till exempel använda mer stackutrymme, allokera mer minne och köra långsammare.
- Om snabb JIT inaktiveras men nivåindelad kompilering är aktiverad, deltar endast förkompilerad kod i nivåindelad kompilering. Om en metod inte förkompileras med ReadyToRun är JIT-beteendet detsamma som om nivåindelad kompilering inaktiverades.
- I .NET Core 3.0 och senare aktiveras snabb JIT som standard.
- I .NET Core 2.1 och 2.2 inaktiveras snabb-JIT som standard.
Inställningsnamn | Värden | |
---|---|---|
runtimeconfig.json | System.Runtime.TieredCompilation.QuickJit |
true -Aktiveratfalse -Inaktiverad |
MSBuild-egenskap | TieredCompilationQuickJit |
true -Aktiveratfalse -Inaktiverad |
Miljövariabel | COMPlus_TC_QuickJit eller DOTNET_TC_QuickJit |
1 -Aktiverat0 -Inaktiverad |
Exempel
runtimeconfig.json fil:
{
"runtimeOptions": {
"configProperties": {
"System.Runtime.TieredCompilation.QuickJit": false
}
}
}
runtimeconfig.template.json fil:
{
"configProperties": {
"System.Runtime.TieredCompilation.QuickJit": false
}
}
Projektfil:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredCompilationQuickJit>false</TieredCompilationQuickJit>
</PropertyGroup>
</Project>
Snabb JIT för loopar
- Konfigurerar om JIT-kompilatorn använder snabb JIT på metoder som innehåller loopar.
- Om du aktiverar snabb JIT för loopar kan startprestanda förbättras. Långvariga loopar kan dock fastna i mindre optimerad kod under långa perioder.
- Om snabb-JIT är inaktiverat har den här inställningen ingen effekt.
- Om du utelämnar den här inställningen används inte snabb-JIT för metoder som innehåller loopar. Detta motsvarar att ange värdet till
false
.
Inställningsnamn | Värden | |
---|---|---|
runtimeconfig.json | System.Runtime.TieredCompilation.QuickJitForLoops |
false -Inaktiveradtrue -Aktiverat |
MSBuild-egenskap | TieredCompilationQuickJitForLoops |
false -Inaktiveradtrue -Aktiverat |
Miljövariabel | COMPlus_TC_QuickJitForLoops eller DOTNET_TC_QuickJitForLoops |
0 -Inaktiverad1 -Aktiverat |
Exempel
runtimeconfig.json fil:
{
"runtimeOptions": {
"configProperties": {
"System.Runtime.TieredCompilation.QuickJitForLoops": false
}
}
}
runtimeconfig.template.json fil:
{
"configProperties": {
"System.Runtime.TieredCompilation.QuickJitForLoops": false
}
}
Projektfil:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredCompilationQuickJitForLoops>true</TieredCompilationQuickJitForLoops>
</PropertyGroup>
</Project>
ReadyToRun
- Konfigurerar om .NET Core-körningen använder förkompilerad kod för avbildningar med tillgängliga ReadyToRun-data. Om du inaktiverar det här alternativet framtvingas körningen till JIT-kompilera ramverkskod.
- Mer information finns i Redo att köras.
- Om du utelämnar den här inställningen använder .NET ReadyToRun-data när de är tillgängliga. Detta motsvarar att ange värdet till
1
.
Inställningsnamn | Värden | |
---|---|---|
Miljövariabel | COMPlus_ReadyToRun eller DOTNET_ReadyToRun |
1 -Aktiverat0 -Inaktiverad |
Profilstyrd optimering
Den här inställningen möjliggör dynamisk (nivåindelad) profilstyrd optimering (PGO) i .NET 6 och senare versioner.
Inställningsnamn | Värden | |
---|---|---|
Miljövariabel | DOTNET_TieredPGO |
1 -Aktiverat0 -Inaktiverad |
MSBuild-egenskap | TieredPGO |
true -Aktiveratfalse -Inaktiverad |
Profilstyrd optimering (PGO) är den plats där JIT-kompilatorn genererar optimerad kod när det gäller de typer och kodsökvägar som används oftast. Dynamisk PGO fungerar hand i hand med nivåindelad kompilering för att ytterligare optimera kod baserat på ytterligare instrumentation som införs under nivå 0.
Exempel
Projektfil:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredPGO>true</TieredPGO>
</PropertyGroup>
</Project>