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 -Ingeschakeldfalse -Handicap |
MSBuild-eigenschap | TieredCompilation |
true -Ingeschakeldfalse -Handicap |
Omgevingsvariabele | COMPlus_TieredCompilation of DOTNET_TieredCompilation |
1 -Ingeschakeld0 -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 -Ingeschakeldfalse -Handicap |
MSBuild-eigenschap | TieredCompilationQuickJit |
true -Ingeschakeldfalse -Handicap |
Omgevingsvariabele | COMPlus_TC_QuickJit of DOTNET_TC_QuickJit |
1 -Ingeschakeld0 -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 -Handicaptrue -Ingeschakeld |
MSBuild-eigenschap | TieredCompilationQuickJitForLoops |
false -Handicaptrue -Ingeschakeld |
Omgevingsvariabele | COMPlus_TC_QuickJitForLoops of DOTNET_TC_QuickJitForLoops |
0 -Handicap1 -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 -Ingeschakeld0 -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 -Ingeschakeld0 -Handicap |
MSBuild-eigenschap | TieredPGO |
true -Ingeschakeldfalse -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>