Laufzeitkonfigurationsoptionen für die Kompilierung
In diesem Artikel werden die Einstellungen beschrieben, mit denen Sie die Kompilierung in .NET konfigurieren können.
Hinweis
In .NET 6 ist das Präfix DOTNET_
statt COMPlus_
Standard für Umgebungsvariablen, die das .NET-Runtimeverhalten konfigurieren. Das Präfix COMPlus_
funktioniert jedoch weiterhin. Wenn Sie eine frühere Version der .NET-Runtime verwenden, sollten Sie weiterhin das Präfix COMPlus_
für Umgebungsvariablen verwenden.
Mehrstufig Kompilierung
- Hiermit wird konfiguriert, ob der Just-in-Time-Compiler (JIT) eine mehrstufige Kompilierung verwendet. Die mehrstufige Kompilierung übergibt Methoden über zwei Ebenen:
- Die erste Stufe erzeugt schneller Code (Quick JIT) oder lädt vorkompilierten Code (ReadyToRun).
- Die zweite Stufe erstellt optimierten Code im Hintergrund („Optimieren von JIT“).
- In .NET Core 3.0 und höher ist die mehrstufige Kompilierung standardmäßig aktiviert.
- In .NET Core 2.1 und 2.2 ist die mehrstufige Kompilierung standardmäßig deaktiviert.
- Weitere Informationen finden Sie im Leitfaden zur mehrstufigen Kompilierung.
Einstellungsname | Werte | |
---|---|---|
runtimeconfig.json | System.Runtime.TieredCompilation |
true – aktiviertfalse – deaktiviert |
MSBuild-Eigenschaft | TieredCompilation |
true – aktiviertfalse – deaktiviert |
Umgebungsvariable | COMPlus_TieredCompilation oder DOTNET_TieredCompilation |
1 – aktiviert0 – deaktiviert |
Beispiele
runtimeconfig.json-Datei:
{
"runtimeOptions": {
"configProperties": {
"System.Runtime.TieredCompilation": false
}
}
}
runtimeconfig.template.json-Datei:
{
"configProperties": {
"System.Runtime.TieredCompilation": false
}
}
Projektdatei:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredCompilation>false</TieredCompilation>
</PropertyGroup>
</Project>
Quick JIT
- Hiermit wird konfiguriert, ob der JIT-Compiler Quick JIT verwendet. Bei Methoden, die keine Schleifen enthalten und für die kein vorkompilierter Code verfügbar ist, kompiliert Quick JIT diese schneller, aber ohne Optimierungen.
- Die Aktivierung von Quick JIT verringert die Startzeit, kann aber Code mit verminderten Leistungsmerkmalen erzeugen. Zum Beispiel verwendet der Code möglicherweise mehr Stapelspeicher, kann mehr Speicher belegen und langsamer ausgeführt werden.
- Wenn Quick JIT deaktiviert, aber die mehrstufige Kompilierung aktiviert ist, wird nur vorkompilierter Code bei der mehrstufigen Kompilierung verwendet. Wenn eine Methode nicht mit ReadyToRun vorkompiliert ist, ist das JIT-Verhalten dasselbe, als wenn die mehrstufige Kompilierung deaktiviert wäre.
- In .NET Core 3.0 und höher ist Quick JIT standardmäßig aktiviert.
- In .NET Core 2.1 und 2.2 ist Quick JIT standardmäßig deaktiviert.
Einstellungsname | Werte | |
---|---|---|
runtimeconfig.json | System.Runtime.TieredCompilation.QuickJit |
true – aktiviertfalse – deaktiviert |
MSBuild-Eigenschaft | TieredCompilationQuickJit |
true – aktiviertfalse – deaktiviert |
Umgebungsvariable | COMPlus_TC_QuickJit oder DOTNET_TC_QuickJit |
1 – aktiviert0 – deaktiviert |
Beispiele
runtimeconfig.json-Datei:
{
"runtimeOptions": {
"configProperties": {
"System.Runtime.TieredCompilation.QuickJit": false
}
}
}
runtimeconfig.template.json-Datei:
{
"configProperties": {
"System.Runtime.TieredCompilation.QuickJit": false
}
}
Projektdatei:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredCompilationQuickJit>false</TieredCompilationQuickJit>
</PropertyGroup>
</Project>
Quick JIT für Schleifen
- Hiermit wird konfiguriert, ob der JIT-Compiler Quick JIT bei Methoden verwendet, die Schleifen enthalten.
- Die Aktivierung von Quick JIT für Schleifen kann die Startleistung verbessern. Lange Schleifen können jedoch für lange Zeiträume in weniger optimiertem Code hängen bleiben.
- Wenn Quick JIT deaktiviert ist, hat diese Einstellung keine Auswirkung.
- Wenn Sie diese Einstellung weglassen, wird Quick JIT nicht für Methoden verwendet, die Schleifen enthalten. Dies entspricht der Einstellung des Werts auf
false
.
Einstellungsname | Werte | |
---|---|---|
runtimeconfig.json | System.Runtime.TieredCompilation.QuickJitForLoops |
false – deaktivierttrue – aktiviert |
MSBuild-Eigenschaft | TieredCompilationQuickJitForLoops |
false – deaktivierttrue – aktiviert |
Umgebungsvariable | COMPlus_TC_QuickJitForLoops oder DOTNET_TC_QuickJitForLoops |
0 – deaktiviert1 – aktiviert |
Beispiele
runtimeconfig.json-Datei:
{
"runtimeOptions": {
"configProperties": {
"System.Runtime.TieredCompilation.QuickJitForLoops": false
}
}
}
runtimeconfig.template.json-Datei:
{
"configProperties": {
"System.Runtime.TieredCompilation.QuickJitForLoops": false
}
}
Projektdatei:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredCompilationQuickJitForLoops>true</TieredCompilationQuickJitForLoops>
</PropertyGroup>
</Project>
ReadyToRun
- Das ReadyToRun-Image konfiguriert, ob die .NET Core-Runtime vorkompilierten Code für Images mit verfügbaren ReadyToRun-Daten verwendet. Wenn Sie diese Option deaktivieren, erzwingt die Runtime eine JIT-Kompilierung für Frameworkcode.
- Weitere Informationen finden Sie auf der Seite zu Bereit zur Ausführung.
- Wenn Sie diese Einstellung weglassen, verwendet .NET ReadyToRun-Daten, sofern verfügbar. Dies entspricht der Einstellung des Werts auf
1
.
Einstellungsname | Werte | |
---|---|---|
Umgebungsvariable | COMPlus_ReadyToRun oder DOTNET_ReadyToRun |
1 – aktiviert0 – deaktiviert |
Profilgesteuerte Optimierung
Diese Einstellung ermöglicht die dynamische (gestufte) profilgeführte Optimierung (PGO) in .NET 6 und höher.
Einstellungsname | Werte | |
---|---|---|
Umgebungsvariable | DOTNET_TieredPGO |
1 – aktiviert0 – deaktiviert |
MSBuild-Eigenschaft | TieredPGO |
true – aktiviertfalse – deaktiviert |
Bei der profilgesteuerten Optimierung (PGO) generiert der JIT-Compiler optimierten Code für die am häufigsten verwendeten Typen und Codepfade. Dynamic PGO arbeitet hand-in-Hand mit gestaffelter Kompilierung, um Code basierend auf zusätzlicher Instrumentierung weiter zu optimieren, die während der Ebene 0 eingerichtet wird.
Beispiele
Projektdatei:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredPGO>true</TieredPGO>
</PropertyGroup>
</Project>