Options de configuration du runtime pour la compilation
Cet article détaille les paramètres que vous pouvez utiliser pour configurer la compilation .NET.
Notes
.NET 6 se normalise sur le préfixe DOTNET_
au lieu de COMPlus_
pour les variables d’environnement qui configurent le comportement au moment de l’exécution de .NET. Toutefois, le préfixe COMPlus_
continuera à fonctionner. Si vous utilisez une version précédente du runtime .NET, vous devez tout de même utiliser le préfixe COMPlus_
.
Compilation hiérarchisée
- Configure si le compilateur juste-à-temps (JIT) utilise la compilation hiérarchisée. La compilation hiérarchisée fait passer les méthodes par deux niveaux :
- Le premier niveau génère du code plus rapidement (JIT rapide) ou charge du code précompilé (ReadyToRun).
- Le second niveau génère le code optimisé en arrière-plan (« optimisation du JIT »).
- Dans .NET Core 3.0 et versions ultérieures, la compilation hiérarchisée est activée par défaut.
- Dans .NET Core 2.1 et 2.2, la compilation hiérarchisée est désactivée par défaut.
- Pour plus d’informations, consultez le guide de compilation hiérarchisée.
Nom du paramètre | Valeurs | |
---|---|---|
runtimeconfig.json | System.Runtime.TieredCompilation |
true - activéfalse - désactivé |
Propriété MSBuild | TieredCompilation |
true - activéfalse - désactivé |
Variable d'environnement | COMPlus_TieredCompilation ou DOTNET_TieredCompilation |
1 - activé0 - désactivé |
Exemples
Fichier runtimeconfig.json :
{
"runtimeOptions": {
"configProperties": {
"System.Runtime.TieredCompilation": false
}
}
}
Fichier runtimeconfig.template.json :
{
"configProperties": {
"System.Runtime.TieredCompilation": false
}
}
Fichier projet :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredCompilation>false</TieredCompilation>
</PropertyGroup>
</Project>
JIT rapide
- Configure si le compilateur JIT utilise le JIT rapide. Pour les méthodes qui ne contiennent pas de boucles et pour lesquelles le code précompilé n’est pas disponible, le JIT rapide les compile plus rapidement, mais sans optimisations.
- L’activation du JIT rapide réduit le temps de démarrage, mais peut produire du code avec des caractéristiques de performances dégradées. Par exemple, le code peut utiliser plus d’espace de pile, allouer plus de mémoire et s’exécuter plus lentement.
- Si le JIT rapide est désactivé, mais que la compilation hiérarchisée est activée, seul le code précompilé participe à la compilation hiérarchisée. Si une méthode n’est pas précompilée avec ReadyToRun, le comportement JIT est le même que si la compilation hiérarchisée était désactivée.
- Dans .NET Core 3.0 et versions ultérieures, le JIT rapide est activé par défaut.
- Dans .NET Core 2.1 et 2.2, le JIT rapide est désactivé par défaut.
Nom du paramètre | Valeurs | |
---|---|---|
runtimeconfig.json | System.Runtime.TieredCompilation.QuickJit |
true - activéfalse - désactivé |
Propriété MSBuild | TieredCompilationQuickJit |
true - activéfalse - désactivé |
Variable d'environnement | COMPlus_TC_QuickJit ou DOTNET_TC_QuickJit |
1 - activé0 - désactivé |
Exemples
Fichier runtimeconfig.json :
{
"runtimeOptions": {
"configProperties": {
"System.Runtime.TieredCompilation.QuickJit": false
}
}
}
Fichier runtimeconfig.template.json :
{
"configProperties": {
"System.Runtime.TieredCompilation.QuickJit": false
}
}
Fichier projet :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredCompilationQuickJit>false</TieredCompilationQuickJit>
</PropertyGroup>
</Project>
JIT rapide pour les boucles
- Configure si le compilateur JIT utilise le JIT rapide sur les méthodes qui contiennent des boucles.
- L’activation du JIT rapide pour les boucles peut améliorer les performances de démarrage. Toutefois, les boucles de longue durée peuvent être bloquées dans du code moins optimisé pendant de longues périodes.
- Si le JIT rapide est désactivé, ce paramètre n’a aucun effet.
- Si vous omettez ce paramètre, le JIT rapide n’est pas utilisé pour les méthodes qui contiennent des boucles. Ceci équivaut à définir la valeur
false
.
Nom du paramètre | Valeurs | |
---|---|---|
runtimeconfig.json | System.Runtime.TieredCompilation.QuickJitForLoops |
false - désactivétrue - activé |
Propriété MSBuild | TieredCompilationQuickJitForLoops |
false - désactivétrue - activé |
Variable d'environnement | COMPlus_TC_QuickJitForLoops ou DOTNET_TC_QuickJitForLoops |
0 - désactivé1 - activé |
Exemples
Fichier runtimeconfig.json :
{
"runtimeOptions": {
"configProperties": {
"System.Runtime.TieredCompilation.QuickJitForLoops": false
}
}
}
Fichier runtimeconfig.template.json :
{
"configProperties": {
"System.Runtime.TieredCompilation.QuickJitForLoops": false
}
}
Fichier projet :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredCompilationQuickJitForLoops>true</TieredCompilationQuickJitForLoops>
</PropertyGroup>
</Project>
ReadyToRun
- Configure si le runtime .NET Core utilise du code précompilé pour les images avec les données ReadyToRun disponibles. La désactivation de cette option force le runtime à effectuer une compilation JIT du code du framework.
- Pour plus d’informations, consultez Prêt à s’exécuter.
- Si vous omettez ce paramètre, .NET utilise les données ReadyToRun quand elles sont disponibles. Ceci équivaut à définir la valeur
1
.
Nom du paramètre | Valeurs | |
---|---|---|
Variable d'environnement | COMPlus_ReadyToRun ou DOTNET_ReadyToRun |
1 - activé0 - désactivé |
Optimisation guidée par profil
Ce paramètre active l’optimisation dynamique (hiérarchisé) guidée par profil (PGO) dans .NET 6 et versions ultérieures.
Nom du paramètre | Valeurs | |
---|---|---|
Variable d'environnement | DOTNET_TieredPGO |
1 – activé0 - désactivé |
Propriété MSBuild | TieredPGO |
true - activéfalse - désactivé |
L’optimisation guidée par profil est l’endroit où le compilateur JIT génère du code optimisé en termes de types et de chemins de code les plus fréquemment utilisés. Le PGO dynamique fonctionne main dans la main avec la compilation hiérarchisé pour optimiser davantage le code en fonction de l’instrumentation supplémentaire mise en place pendant le niveau 0.
Exemples
Fichier projet :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredPGO>true</TieredPGO>
</PropertyGroup>
</Project>