Condividi tramite


Opzioni di configurazione del runtime per la compilazione

Questo articolo illustra in dettaglio le impostazioni che è possibile usare per configurare la compilazione .NET.

Compilazione a livelli

  • Configura se il compilatore JIT (Just-In-Time) usa la compilazione a livelli. La compilazione a livelli esegue la transizione dei metodi tramite due livelli:
    • Il primo livello genera codice più rapidamente (JIT rapido) o carica codice precompilato (ReadyToRun).
    • Il secondo livello genera codice ottimizzato in background ("ottimizzazione di JIT").
  • In .NET Core 3.0 e versioni successive la compilazione a livelli è abilitata per impostazione predefinita.
  • In .NET Core 2.1 e 2.2 la compilazione a livelli è disabilitata per impostazione predefinita.
  • Per altre informazioni, vedere la guida alla compilazione a livelli.
Nome della impostazione Valori
runtimeconfig.json System.Runtime.TieredCompilation true - abilitato
false - disabilitata
Proprietà MSBuild TieredCompilation true - abilitato
false - disabilitata
Variabile di ambiente DOTNET_TieredCompilation 1 - abilitato
0 - disabilitata

Esempi

File runtimeconfig.json:

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

File runtimeconfig.template.json:

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

File di progetto:

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

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

</Project>

JIT rapido

  • Configura se il compilatore JIT usa JIT rapido. Per i metodi che non contengono cicli e per cui il codice precompilato non è disponibile, JIT rapido li compila più rapidamente, ma senza ottimizzazioni.
  • L'abilitazione rapida di JIT riduce il tempo di avvio, ma può produrre codice con caratteristiche di prestazioni ridotte. Ad esempio, il codice può usare più spazio dello stack, allocare più memoria ed eseguire più lentamente.
  • Se jit rapido è disabilitato ma la compilazione a livelli è abilitata, solo il codice precompilato partecipa alla compilazione a livelli. Se un metodo non è precompilato con ReadyToRun, il comportamento JIT corrisponde a se la compilazione a livelli fosse disabilitata .
  • In .NET Core 3.0 e versioni successive è abilitato JIT rapido per impostazione predefinita.
  • In .NET Core 2.1 e 2.2 la funzionalità JIT rapida è disabilitata per impostazione predefinita.
Nome della impostazione Valori
runtimeconfig.json System.Runtime.TieredCompilation.QuickJit true - abilitato
false - disabilitata
Proprietà MSBuild TieredCompilationQuickJit true - abilitato
false - disabilitata
Variabile di ambiente DOTNET_TC_QuickJit 1 - abilitato
0 - disabilitata

Esempi

File runtimeconfig.json:

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

File runtimeconfig.template.json:

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

File di progetto:

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

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

</Project>

JIT rapido per i cicli

  • Configura se il compilatore JIT usa JIT rapido nei metodi che contengono cicli.
  • L'abilitazione di cicli JIT rapidi può migliorare le prestazioni di avvio. Tuttavia, i cicli a esecuzione prolungata possono rimanere bloccati nel codice meno ottimizzato per lunghi periodi.
  • Se jit rapido è disabilitato, questa impostazione non ha alcun effetto.
  • Se si omette questa impostazione, jit rapido non viene usato per i metodi che contengono cicli. Equivale a impostare il valore su false.
Nome della impostazione Valori
runtimeconfig.json System.Runtime.TieredCompilation.QuickJitForLoops false - disabilitata
true - abilitato
Proprietà MSBuild TieredCompilationQuickJitForLoops false - disabilitata
true - abilitato
Variabile di ambiente DOTNET_TC_QuickJitForLoops 0 - disabilitata
1 - abilitato

Esempi

File runtimeconfig.json:

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

File runtimeconfig.template.json:

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

File di progetto:

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

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

</Project>

ReadyToRun

  • Configura se il runtime .NET usa codice precompilato per le immagini con dati ReadyToRun disponibili. La disabilitazione di questa opzione forza il runtime al codice framework JIT-compile.
  • Per altre informazioni, vedere ReadyToRun.
  • Se si omette questa impostazione, .NET usa i dati ReadyToRun quando sono disponibili. Equivale a impostare il valore su 1.
Nome della impostazione Valori
Variabile di ambiente DOTNET_ReadyToRun 1 - abilitato
0 - disabilitata

Ottimizzazione guidata dal profilo

Questa impostazione abilita l'ottimizzazione pgo (pgo) dinamica (a livelli) in .NET 6 e versioni successive.

Nome della impostazione Valori
Variabile di ambiente DOTNET_TieredPGO 1 - abilitato
0 - disabilitata
Proprietà MSBuild TieredPGO true - abilitato
false - disabilitata

L'ottimizzazione guidata dal profilo (PGO, Profile-Guided Optimization) è un processo in cui il compilatore JIT genera codice ottimizzato basato sui tipi e sui percorsi di codice più frequentemente utilizzati. Dinamico PGO funziona a portata di mano con la compilazione a livelli per ottimizzare ulteriormente il codice in base a strumentazione aggiuntiva che viene messa in atto durante il livello 0.

Esempi

File di progetto:

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

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

</Project>