Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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>