Microsoft .NET Native Runtime: предкомпилированное время выполнения для более быстрых UWP приложений
Испытайте Microsoft .NET Native Runtime от Microsoft Corporation, предкомпиляционный runtime, который нацелен на более быстрое запуск Universal Windows Platform приложений. Вместо компиляции Just-In-Time во время выполнения, runtime преобразует управляемый C# и VB.NET в нативный машинный код в процессе сборки, уменьшая накладные расходы на перевод и инициализацию во время выполнения. Ключевые эффекты включают меньшие размеры приложений и аппаратно-специфичные бинарные файлы, произведенные для x86, x64 и ARM. Разработчики, создающие Store приложения, и пользователи на современных устройствах Windows получают заметно более быстрые запуски и более низкое использование ресурсов во время выполнения.
Лучшая рекомендуемая альтернатива
Что на самом деле делает среда выполнения для приложений UWP
Среда выполнения преобразует управляемые сборки в нативные бинарные файлы во время сборки, создавая исполняемые файлы, которые встраивают только необходимые компоненты фреймворка. Эта статическая предварительная компиляция устраняет JIT-перевод во время запуска приложения и поддерживает развернутые пакеты компактными за счет tree shaking. Для разработчиков это означает, что работа во время сборки создает выходные данные, специфичные для архитектуры, а не полагается на компиляцию во время выполнения, так что пакеты развертывания содержат нативный код, настроенный на выбранную целевую архитектуру.
Как это влияет на запуск, память и батарею на практике
Измеренные эффекты включают гораздо более быстрое инициализацию приложения и более низкое использование активной памяти, потому что среда выполнения связывает только упомянутые элементы фреймворка и избегает накладных расходов JIT. Более того, нативное выполнение снижает количество циклов ЦП во время инициализации, что документация для разработчиков связывает с улучшенным использованием батареи на мобильных устройствах. Для конечных пользователей ощутимый результат заключается в меньшем количестве пауз во время критических путей выполнения, которые в противном случае происходили бы, пока среда выполнения компилирует код по запросу.
Безопасно ли использовать на производственных системах и как это поставляется
Среда выполнения распространяется как зависимость фреймворка и обычно устанавливается автоматически через Microsoft Store, когда приложение требует этого, что упрощает развертывание на устройствах. Кроме того, устранение вызванного JIT рывка производит более последовательное поведение среды выполнения в производстве. Тем не менее, статическая компиляция может повлиять на динамическое поведение; некоторые сценарии рефлексии требуют явных директив среды выполнения, чтобы гарантировать сохранение кода в нативном образе.
Нужны ли разработчикам дополнительные знания для правильного использования среды выполнения
Разработчики, нацеленные на UWP, должны планировать сборки, специфичные для архитектуры, и природу инструментария во время сборки. Кроме того, командам, которые полагаются на генерацию кода во время выполнения или широкую рефлексию, необходимо добавить директивы времени выполнения (rd.xml), чтобы предотвратить удаление необходимых типов. Тестирование сборок релиза на каждой целевой архитектуре необходимо, потому что финальный бинарный файл компилируется для x86, x64 или ARM во время отправки и может вести себя иначе, чем отлаженная сборка, запущенная с помощью JIT.
Практичный выбор для разработки UWP, ориентированной на производительность, с компромиссом в упаковке
Microsoft .NET Native Runtime является практичным вариантом для разработчиков, которым нужен запуск приложений Store с нативной скоростью; компромисс заключается в увеличении сложности сборки и упаковки, поскольку выходные данные компилируются для каждой архитектуры. Для надежных релизов протестируйте скомпилированный бинарный файл релиза на каждой целевой архитектуре и включите директивы времени выполнения для любых динамических функций. Этот подход подходит командам, которые ставят приоритет на время запуска и стабильность времени выполнения, а не на упрощенный процесс с одним бинарным файлом.