Compartir por


Opciones de configuración en tiempo de ejecución para la compilación

En este artículo se detallan las opciones que puede usar para configurar la compilación de .NET.

Compilación en niveles

  • Configura si el compilador Just-In-Time (JIT) usa la compilación en capas. La compilación en capas realiza transiciones de métodos a través de dos niveles:
    • El primer nivel genera código más rápidamente (JIT rápido) o carga código precompilado (ReadyToRun).
    • El segundo nivel genera código optimizado en segundo plano ("optimizando JIT").
  • En .NET Core 3.0 y versiones posteriores, la compilación en capas está habilitada de forma predeterminada.
  • En .NET Core 2.1 y 2.2, la compilación en capas está deshabilitada de forma predeterminada.
  • Para obtener más información, consulte la guía de compilación en capas.
Nombre del valor de configuración Valores
runtimeconfig.json System.Runtime.TieredCompilation true: habilitado.
false: deshabilitado.
Propiedad de MSBuild TieredCompilation true: habilitado.
false: deshabilitado.
Variable del entorno DOTNET_TieredCompilation 1: habilitado.
0: deshabilitado.

Examples

Archivo runtimeconfig.json:

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

archivo runtimeconfig.template.json:

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

Archivo del proyecto:

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

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

</Project>

JIT rápido

  • Configura si el compilador JIT usa JIT rápido. Para los métodos que no contienen bucles y para los que el código precompilado no está disponible, JIT rápido los compila más rápidamente, pero sin optimizaciones.
  • La habilitación rápida de JIT reduce el tiempo de inicio, pero puede generar código con características de rendimiento degradadas. Por ejemplo, el código puede usar más espacio de pila, asignar más memoria y ejecutarse más lentamente.
  • Si jiT rápido está deshabilitado, pero la compilación en capas está habilitada, solo el código precompilado participa en la compilación en capas. Si un método no está compilado previamente con ReadyToRun, el comportamiento JIT es el mismo que si la compilación en capas estuviera deshabilitada .
  • En .NET Core 3.0 y versiones posteriores, JIT rápido está habilitado de forma predeterminada.
  • En .NET Core 2.1 y 2.2, JIT rápido está deshabilitado de forma predeterminada.
Nombre del valor de configuración Valores
runtimeconfig.json System.Runtime.TieredCompilation.QuickJit true: habilitado.
false: deshabilitado.
Propiedad de MSBuild TieredCompilationQuickJit true: habilitado.
false: deshabilitado.
Variable del entorno DOTNET_TC_QuickJit 1: habilitado.
0: deshabilitado.

Examples

Archivo runtimeconfig.json:

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

archivo runtimeconfig.template.json:

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

Archivo del proyecto:

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

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

</Project>

Bucles JIT rápidos para bucles

  • Configura si el compilador JIT usa JIT rápido en métodos que contienen bucles.
  • La habilitación de bucles JIT rápidos puede mejorar el rendimiento del inicio. Sin embargo, los bucles de ejecución prolongada se pueden bloquear en código menos optimizado durante largos períodos.
  • Si jiT rápido está deshabilitado, esta configuración no tiene ningún efecto.
  • Si omite esta configuración, jiT rápido no se usa para los métodos que contienen bucles. Esto es equivalente a establecer el valor en false.
Nombre del valor de configuración Valores
runtimeconfig.json System.Runtime.TieredCompilation.QuickJitForLoops false: deshabilitado.
true: habilitado.
Propiedad de MSBuild TieredCompilationQuickJitForLoops false: deshabilitado.
true: habilitado.
Variable del entorno DOTNET_TC_QuickJitForLoops 0: deshabilitado.
1: habilitado.

Examples

Archivo runtimeconfig.json:

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

archivo runtimeconfig.template.json:

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

Archivo del proyecto:

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

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

</Project>

ReadyToRun

  • Configura si el entorno de ejecución de .NET usa código precompilado para imágenes con datos ReadyToRun disponibles. Al deshabilitar esta opción, se fuerza el tiempo de ejecución al código del marco de compilación JIT.
  • Para obtener más información, consulte Ready to Run.
  • Si omite esta configuración, .NET usa los datos ReadyToRun cuando esté disponible. Esto es equivalente a establecer el valor en 1.
Nombre del valor de configuración Valores
Variable del entorno DOTNET_ReadyToRun 1: habilitado.
0: deshabilitado.

Optimización guiada por perfiles

Esta configuración habilita la optimización guiada por perfiles (PGO) dinámica (en capas) en .NET 6 y versiones posteriores.

Nombre del valor de configuración Valores
Variable del entorno DOTNET_TieredPGO 1: habilitado.
0: deshabilitado.
Propiedad de MSBuild TieredPGO true: habilitado.
false: deshabilitado.

La optimización guiada por perfiles (PGO) es donde el compilador JIT genera código optimizado en términos de los tipos y rutas de acceso de código que se usan con más frecuencia. Dinámico PGO funciona manualmente con la compilación en capas para optimizar aún más el código en función de la instrumentación adicional que se ha implementado durante el nivel 0.

Examples

Archivo del proyecto:

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

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

</Project>