Параметры конфигурации времени выполнения для компиляцииRun-time configuration options for compilation

Многоуровневая компиляцияTiered compilation

  • Указывает, использует ли JIT-компилятор многоуровневую компиляцию.Configures whether the just-in-time (JIT) compiler uses tiered compilation. Многоуровневая компиляция обеспечивает переход методов по двум уровням.Tiered compilation transitions methods through two tiers:
    • Первый уровень создает код быстрее (быстрая JIT-компиляция) или загружает предварительно скомпилированный код (ReadyToRun).The first tier generates code more quickly (quick JIT) or loads pre-compiled code (ReadyToRun).
    • Второй уровень создает оптимизированный код в фоновом режиме (JIT-компиляция с оптимизацией).The second tier generates optimized code in the background ("optimizing JIT").
  • В .NET Core 3.0 и более поздних версий многоуровневая компиляция включена по умолчанию.In .NET Core 3.0 and later, tiered compilation is enabled by default.
  • В .NET Core 2.1 и 2.2 многоуровневая компиляция отключена по умолчанию.In .NET Core 2.1 and 2.2, tiered compilation is disabled by default.
  • Дополнительные сведения см. в руководстве по многоуровневой компиляции.For more information, see the Tiered compilation guide.
Имя параметраSetting name ЗначенияValues
runtimeconfig.jsonruntimeconfig.json System.Runtime.TieredCompilation true — включеноtrue - enabled
false — отключеноfalse - disabled
Свойство MSBuildMSBuild property TieredCompilation true — включеноtrue - enabled
false — отключеноfalse - disabled
Переменная средыEnvironment variable COMPlus_TieredCompilation 1 — включено1 - enabled
0 — отключено0 - disabled

ПримерыExamples

Файл runtimeconfig.jsonruntimeconfig.json file:

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

Файл проекта:Project file:

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

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

</Project>

Быстрая JIT-компиляцияQuick JIT

  • Указывает, использует ли JIT-компилятор быструю JIT-компиляцию.Configures whether the JIT compiler uses quick JIT. Для методов, которые не содержат циклы и для которых предварительно скомпилированный код недоступен, быстрая JIT-компиляция компилирует их быстрее, но без оптимизации.For methods that don't contain loops and for which pre-compiled code is not available, quick JIT compiles them more quickly but without optimizations.
  • Включение быстрой JIT-компиляции сокращает время запуска, однако создаваемый код может обладать низкой производительностью.Enabling quick JIT decreases startup time but can produce code with degraded performance characteristics. Например, код может использовать больше пространства стека, выделять больше памяти и работать медленнее.For example, the code may use more stack space, allocate more memory, and run slower.
  • Если быстрая JIT-компиляция отключена, но включена многоуровневая компиляция, в многоуровневой компиляции участвует только предварительно скомпилированный код.If quick JIT is disabled but tiered compilation is enabled, only pre-compiled code participates in tiered compilation. Если метод не был предварительно скомпилирован с помощью ReadyToRun, то поведение JIT будет таким же, как если бы многоуровневая компиляция была отключена.If a method is not pre-compiled with ReadyToRun, the JIT behavior is the same as if tiered compilation were disabled.
  • В .NET Core 3.0 и более поздних версий быстрая JIT-компиляция включена по умолчанию.In .NET Core 3.0 and later, quick JIT is enabled by default.
  • В .NET Core 2.1 и 2.2 быстрая JIT-компиляция отключена по умолчанию.In .NET Core 2.1 and 2.2, quick JIT is disabled by default.
Имя параметраSetting name ЗначенияValues
runtimeconfig.jsonruntimeconfig.json System.Runtime.TieredCompilation.QuickJit true — включеноtrue - enabled
false — отключеноfalse - disabled
Свойство MSBuildMSBuild property TieredCompilationQuickJit true — включеноtrue - enabled
false — отключеноfalse - disabled
Переменная средыEnvironment variable COMPlus_TC_QuickJit 1 — включено1 - enabled
0 — отключено0 - disabled

ПримерыExamples

Файл runtimeconfig.jsonruntimeconfig.json file:

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

Файл проекта:Project file:

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

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

</Project>

Быстрая JIT-компиляция для цикловQuick JIT for loops

  • Указывает, использует ли JIT-компилятор быструю JIT-компиляцию для методов, содержащих циклы.Configures whether the JIT compiler uses quick JIT on methods that contain loops.
  • Включение быстрой JIT-компиляции для циклов может повысить производительность при запуске.Enabling quick JIT for loops may improve startup performance. Однако длительные циклы могут задерживаться на участках менее оптимизированного кода.However, long-running loops can get stuck in less-optimized code for long periods.
  • Если быстрая JIT-компиляция отключена, этот параметр не действует.If quick JIT is disabled, this setting has no effect.
  • Если этот параметр не задан, быстрая JIT-компиляция не используется для методов, содержащих циклы.If you omit this setting, quick JIT is not used for methods that contain loops. Это эквивалентно присвоению значения false.This is equivalent to setting the value to false.
Имя параметраSetting name ЗначенияValues
runtimeconfig.jsonruntimeconfig.json System.Runtime.TieredCompilation.QuickJitForLoops false — отключеноfalse - disabled
true — включеноtrue - enabled
Свойство MSBuildMSBuild property TieredCompilationQuickJitForLoops false — отключеноfalse - disabled
true — включеноtrue - enabled
Переменная средыEnvironment variable COMPlus_TC_QuickJitForLoops 0 — отключено0 - disabled
1 — включено1 - enabled

ПримерыExamples

Файл runtimeconfig.jsonruntimeconfig.json file:

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

Файл проекта:Project file:

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

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

</Project>

ReadyToRunReadyToRun

  • Указывает, использует ли среда выполнения .NET Core предварительно скомпилированный код для образов с доступными данными ReadyToRun.Configures whether the .NET Core runtime uses pre-compiled code for images with available ReadyToRun data. При отключении этого параметра среда выполнения будет принудительно выполнять JIT-компиляцию платформенного кода.Disabling this option forces the runtime to JIT-compile framework code.
  • Дополнительные сведения см. в разделе о ReadyToRun.For more information, see ReadyToRun.
  • Если этот параметр не задан, .NET использует данные ReadyToRun, когда они доступны.If you omit this setting, .NET uses ReadyToRun data when it's available. Это эквивалентно присвоению значения 1.This is equivalent to setting the value to 1.
Имя параметраSetting name ЗначенияValues
Переменная средыEnvironment variable COMPlus_ReadyToRun 1 — включено1 - enabled
0 — отключено0 - disabled