Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описаны параметры, которые можно использовать для настройки компиляции .NET.
Многоуровневая компиляция
- Указывает, использует ли компилятор JIT многоуровневую компиляцию. Методы перехода многоуровневой компиляции через два уровня:
- Первый уровень быстрее создает код (быстрый JIT) или загружает предварительно скомпилированный код (ReadyToRun).
- Второй уровень создает оптимизированный код в фоновом режиме ("оптимизация JIT").
- В .NET Core 3.0 и более поздней версии многоуровневая компиляция включена по умолчанию.
- В .NET Core 2.1 и 2.2 многоуровневая компиляция отключена по умолчанию.
- Дополнительные сведения см. в руководстве по многоуровневой компиляции.
| Название настройки | Ценности | |
|---|---|---|
| runtimeconfig.json | System.Runtime.TieredCompilation |
true — включеноfalse — отключено |
| Свойство MSBuild | TieredCompilation |
true — включеноfalse — отключено |
| Переменная среды | DOTNET_TieredCompilation |
1 — включено0 — отключено |
Примеры
Файл runtimeconfig.json
{
"runtimeOptions": {
"configProperties": {
"System.Runtime.TieredCompilation": false
}
}
}
файл runtimeconfig.template.json:
{
"configProperties": {
"System.Runtime.TieredCompilation": false
}
}
Файл проекта:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredCompilation>false</TieredCompilation>
</PropertyGroup>
</Project>
Быстрый JIT
- Указывает, использует ли компилятор JIT быстрый JIT. Для методов, не содержащих циклы и для которых предварительно скомпилированный код недоступен, быстрый JIT компилирует их быстрее, но без оптимизации.
- Включение быстрого JIT уменьшает время запуска, но может создавать код с пониженными характеристиками производительности. Например, код может использовать больше места в стеке, выделить больше памяти и запустить медленнее.
- Если быстрая JIT-версия отключена, но включена многоуровневая компиляция , то только предварительно скомпилированный код участвует в многоуровневой компиляции. Если метод не скомпилирован с помощью ReadyToRun, то поведение JIT совпадает с тем, как если бы многоуровневая компиляция была отключена.
- В .NET Core 3.0 и более поздних версий быстрый JIT-код включен по умолчанию.
- В .NET Core 2.1 и 2.2 быстрый JIT-код отключен по умолчанию.
| Название настройки | Ценности | |
|---|---|---|
| runtimeconfig.json | System.Runtime.TieredCompilation.QuickJit |
true — включеноfalse — отключено |
| Свойство MSBuild | TieredCompilationQuickJit |
true — включеноfalse — отключено |
| Переменная среды | DOTNET_TC_QuickJit |
1 — включено0 — отключено |
Примеры
Файл runtimeconfig.json
{
"runtimeOptions": {
"configProperties": {
"System.Runtime.TieredCompilation.QuickJit": false
}
}
}
файл runtimeconfig.template.json:
{
"configProperties": {
"System.Runtime.TieredCompilation.QuickJit": false
}
}
Файл проекта:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredCompilationQuickJit>false</TieredCompilationQuickJit>
</PropertyGroup>
</Project>
Быстрый JIT для циклов
- Указывает, использует ли компилятор JIT быстрый JIT-код для методов, содержащих циклы.
- Включение быстрого JIT-файла для циклов может повысить производительность запуска. Однако длительные циклы могут застрять в менее оптимизированном коде в течение длительных периодов.
- Если быстрый JIT-файл отключен, этот параметр не влияет.
- Если этот параметр не указан, быстрый JIT-код не используется для методов, содержащих циклы. Это эквивалентно присвоению значения
false.
| Название настройки | Ценности | |
|---|---|---|
| runtimeconfig.json | System.Runtime.TieredCompilation.QuickJitForLoops |
false — отключеноtrue — включено |
| Свойство MSBuild | TieredCompilationQuickJitForLoops |
false — отключеноtrue — включено |
| Переменная среды | DOTNET_TC_QuickJitForLoops |
0 — отключено1 — включено |
Примеры
Файл runtimeconfig.json
{
"runtimeOptions": {
"configProperties": {
"System.Runtime.TieredCompilation.QuickJitForLoops": false
}
}
}
файл runtimeconfig.template.json:
{
"configProperties": {
"System.Runtime.TieredCompilation.QuickJitForLoops": false
}
}
Файл проекта:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredCompilationQuickJitForLoops>true</TieredCompilationQuickJitForLoops>
</PropertyGroup>
</Project>
ReadyToRun
- Указывает, использует ли среда выполнения .NET предварительно скомпилированный код для изображений с доступными данными ReadyToRun. Отключение этого параметра заставляет среду выполнения выполнять JIT-компиляцию кода платформы.
- Дополнительные сведения см. в статье о ReadyToRun.
- Если этот параметр не указан, .NET использует данные ReadyToRun при его доступности. Это эквивалентно присвоению значения
1.
| Название настройки | Ценности | |
|---|---|---|
| Переменная среды | DOTNET_ReadyToRun |
1 — включено0 — отключено |
Оптимизация с использованием профиля
Этот параметр включает динамическую (многоуровневую) оптимизацию (PGO) в .NET 6 и более поздних версиях.
| Название настройки | Ценности | |
|---|---|---|
| Переменная среды | DOTNET_TieredPGO |
1 — включено0 — отключено |
| Свойство MSBuild | TieredPGO |
true — включеноfalse — отключено |
Оптимизация по профилю (PGO) — это место, в котором компилятор JIT создает оптимизированный код с точки зрения типов и путей кода, которые чаще всего используются. Динамический PGO работает вручную с многоуровневой компиляцией для дальнейшего оптимизации кода на основе дополнительных инструментирования, которые размещаются на уровне 0.
Примеры
Файл проекта:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TieredPGO>true</TieredPGO>
</PropertyGroup>
</Project>