Dela via


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 -Aktiverat
false -Inaktiverad
MSBuild-egenskap TieredCompilation true -Aktiverat
false -Inaktiverad
Miljövariabel COMPlus_TieredCompilation eller DOTNET_TieredCompilation 1 -Aktiverat
0 -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 -Aktiverat
false -Inaktiverad
MSBuild-egenskap TieredCompilationQuickJit true -Aktiverat
false -Inaktiverad
Miljövariabel COMPlus_TC_QuickJit eller DOTNET_TC_QuickJit 1 -Aktiverat
0 -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 -Inaktiverad
true -Aktiverat
MSBuild-egenskap TieredCompilationQuickJitForLoops false -Inaktiverad
true -Aktiverat
Miljövariabel COMPlus_TC_QuickJitForLoops eller DOTNET_TC_QuickJitForLoops 0 -Inaktiverad
1 -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 -Aktiverat
0 -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 -Aktiverat
0 -Inaktiverad
MSBuild-egenskap TieredPGO true -Aktiverat
false -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>