Share via


Runtimeconfiguratieopties voor compilatie

In dit artikel worden de instellingen beschreven die u kunt gebruiken om .NET-compilatie te configureren.

Notitie

.NET 6 standaardiseert het voorvoegsel DOTNET_ in plaats van COMPlus_ voor omgevingsvariabelen die .NET-runtimegedrag configureren. COMPlus_ Het voorvoegsel blijft echter werken. Als u een eerdere versie van de .NET-runtime gebruikt, moet u nog steeds het COMPlus_ voorvoegsel voor omgevingsvariabelen gebruiken.

Gelaagde compilatie

  • Hiermee configureert u of de Just-In-Time-compiler (JIT) gebruikmaakt van gelaagde compilatie. Methoden voor gelaagde compilatieovergangen via twee lagen:
    • De eerste laag genereert code sneller (snelle JIT) of laadt vooraf gecompileerde code (ReadyToRun).
    • Met de tweede laag wordt geoptimaliseerde code op de achtergrond gegenereerd ('JIT optimaliseren').
  • In .NET Core 3.0 en hoger is gelaagde compilatie standaard ingeschakeld.
  • In .NET Core 2.1 en 2.2 is gelaagde compilatie standaard uitgeschakeld.
  • Zie de handleiding gelaagde compilatie voor meer informatie.
Naam instelling Waarden
runtimeconfig.json System.Runtime.TieredCompilation true -Ingeschakeld
false -Handicap
MSBuild-eigenschap TieredCompilation true -Ingeschakeld
false -Handicap
Omgevingsvariabele COMPlus_TieredCompilation of DOTNET_TieredCompilation 1 -Ingeschakeld
0 -Handicap

Voorbeelden

runtimeconfig.json bestand:

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

runtimeconfig.template.json bestand:

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

Projectbestand:

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

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

</Project>

Snelle JIT

  • Hiermee configureert u of de JIT-compiler snelle JIT gebruikt. Voor methoden die geen lussen bevatten en waarvoor vooraf gecompileerde code niet beschikbaar is, compileert snelle JIT deze sneller, maar zonder optimalisaties.
  • Het inschakelen van snelle JIT vermindert de opstarttijd, maar kan code produceren met verminderde prestatiekenmerken. De code kan bijvoorbeeld meer stackruimte gebruiken, meer geheugen toewijzen en langzamer worden uitgevoerd.
  • Als snelle JIT is uitgeschakeld, maar gelaagde compilatie is ingeschakeld, neemt alleen vooraf gecompileerde code deel aan gelaagde compilatie . Als een methode niet vooraf is gecompileerd met ReadyToRun, is het JIT-gedrag hetzelfde als als als gelaagde compilatie is uitgeschakeld.
  • In .NET Core 3.0 en hoger is snelle JIT standaard ingeschakeld.
  • In .NET Core 2.1 en 2.2 is snelle JIT standaard uitgeschakeld.
Naam instelling Waarden
runtimeconfig.json System.Runtime.TieredCompilation.QuickJit true -Ingeschakeld
false -Handicap
MSBuild-eigenschap TieredCompilationQuickJit true -Ingeschakeld
false -Handicap
Omgevingsvariabele COMPlus_TC_QuickJit of DOTNET_TC_QuickJit 1 -Ingeschakeld
0 -Handicap

Voorbeelden

runtimeconfig.json bestand:

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

runtimeconfig.template.json bestand:

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

Projectbestand:

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

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

</Project>

Snelle JIT voor lussen

  • Hiermee configureert u of de JIT-compiler snelle JIT gebruikt op methoden die lussen bevatten.
  • Het inschakelen van snelle JIT voor lussen kan de opstartprestaties verbeteren. Langlopende lussen kunnen echter gedurende lange perioden vastlopen in minder geoptimaliseerde code.
  • Als snelle JIT is uitgeschakeld, heeft deze instelling geen effect.
  • Als u deze instelling weglaat, wordt snelle JIT niet gebruikt voor methoden die lussen bevatten. Dit komt overeen met het instellen van de waarde op false.
Naam instelling Waarden
runtimeconfig.json System.Runtime.TieredCompilation.QuickJitForLoops false -Handicap
true -Ingeschakeld
MSBuild-eigenschap TieredCompilationQuickJitForLoops false -Handicap
true -Ingeschakeld
Omgevingsvariabele COMPlus_TC_QuickJitForLoops of DOTNET_TC_QuickJitForLoops 0 -Handicap
1 -Ingeschakeld

Voorbeelden

runtimeconfig.json bestand:

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

runtimeconfig.template.json bestand:

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

Projectbestand:

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

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

</Project>

ReadyToRun

  • Hiermee configureert u of de .NET Core-runtime vooraf gecompileerde code gebruikt voor installatiekopieën met beschikbare ReadyToRun-gegevens. Als u deze optie uitschakelt, wordt de runtime gedwongen om frameworkcode voor JIT-compileren te gebruiken.
  • Zie Gereed om uit te voeren voor meer informatie.
  • Als u deze instelling weglaat, gebruikt .NET ReadyToRun-gegevens wanneer deze beschikbaar zijn. Dit komt overeen met het instellen van de waarde op 1.
Naam instelling Waarden
Omgevingsvariabele COMPlus_ReadyToRun of DOTNET_ReadyToRun 1 -Ingeschakeld
0 -Handicap

Optimalisatie met profielgestuurd

Met deze instelling kunt u dynamische (gelaagde) profielgestuurde optimalisatie (PGO) in .NET 6 en latere versies inschakelen.

Naam instelling Waarden
Omgevingsvariabele DOTNET_TieredPGO 1 -Ingeschakeld
0 -Handicap
MSBuild-eigenschap TieredPGO true -Ingeschakeld
false -Handicap

Met profielgestuurde optimalisatie (PGO) genereert de JIT-compiler geoptimaliseerde code in termen van de typen en codepaden die het meest worden gebruikt. Dynamische PGO werkt hand-in-hand met gelaagde compilatie om code verder te optimaliseren op basis van extra instrumentatie die wordt uitgevoerd tijdens laag 0.

Voorbeelden

Projectbestand:

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

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

</Project>