Параметры конфигурации времени выполнения для компиляции
Статья
В этой статье подробно описаны параметры, которые можно использовать для настройки компиляции .NET.
Примечание
.NET 6 стандартизует префикс DOTNET_ вместо COMPlus_ для переменных среды, которые настраивают поведение .NET во время выполнения. Но префикс COMPlus_ будет и дальше работать. Если вы используете предыдущую версию среды выполнения .NET, следует и дальше использовать префикс COMPlus_ для переменных среды.
Многоуровневая компиляция
Указывает, использует ли JIT-компилятор многоуровневую компиляцию. Методы перехода многоуровневой компиляции через два уровня:
Указывает, использует ли JIT-компилятор быструю JIT-компиляцию. Для методов, которые не содержат циклы и для которых предварительно скомпилированный код недоступен, быстрая JIT-компиляция компилирует их быстрее, но без оптимизации.
Включение быстрой JIT-компиляции сокращает время запуска, однако создаваемый код может обладать низкой производительностью. Например, код может использовать больше пространства стека, выделять больше памяти и работать медленнее.
Если быстрая JIT-компиляция отключена, но включена многоуровневая компиляция, в многоуровневой компиляции участвует только предварительно скомпилированный код. Если метод не был предварительно скомпилирован с помощью ReadyToRun, то поведение JIT будет таким же, как если бы многоуровневая компиляция была отключена.
В .NET Core 3.0 и более поздних версий быстрая JIT-компиляция включена по умолчанию.
В .NET Core 2.1 и 2.2 быстрая JIT-компиляция отключена по умолчанию.
Указывает, использует ли JIT-компилятор быструю JIT-компиляцию для методов, содержащих циклы.
Включение быстрой JIT-компиляции для циклов может повысить производительность при запуске. Однако длительные циклы могут задерживаться на участках менее оптимизированного кода.
Указывает, использует ли среда выполнения .NET Core предварительно скомпилированный код для образов с доступными данными ReadyToRun. При отключении этого параметра среда выполнения будет принудительно выполнять JIT-компиляцию платформенного кода.
Дополнительные сведения см. в статье о ReadyToRun.
Если этот параметр не задан, .NET использует данные ReadyToRun, когда они доступны. Это эквивалентно присвоению значения 1.
Имя настройки
Values
Переменная среды
COMPlus_ReadyToRun или DOTNET_ReadyToRun
1 — включено 0 — отключено
Профильная оптимизация
Этот параметр включает динамическую (многоуровневую) оптимизацию (PGO) в .NET 6 и более поздних версиях.
Имя настройки
Values
Переменная среды
DOTNET_TieredPGO
1 — включено 0 — отключено
Свойство MSBuild
TieredPGO
true — включено false — отключено
Смысл профильной оптимизаций (PGO) заключается в том, что JIT-компилятор создает оптимизированный код с учетом самых часто используемых типов и путей кода. Динамический PGO работает вручную с многоуровневой компиляцией для дальнейшего оптимизации кода на основе дополнительных инструментирования, которые размещаются на уровне 0.
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Присоединитесь к серии встреч для создания масштабируемых решений искусственного интеллекта на основе реальных вариантов использования с другими разработчиками и экспертами.