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>