Подтвердить что ты не робот

В чем разница между .NET Native и Ngen.exe?

В названии говорится все. Я надеялся, что кто-нибудь может объяснить мне, что .NET Native приносит в таблицу, которую мы еще не имели с Ngen.exe.

4b9b3361

Ответ 1

Насколько я знаю, Ngen все еще зависит от фреймворка, который .NET Native не делает, когда он попадает в производство в соответствии с faq.

Это просто производительность, или это также позволяет строить Код С# (скажем), который изначально компилируется в Win32/64 и не делает требуется установить .NET Framework на целевой машине?

Это правильно:.NET Native - это не только производительность, но и о производительности и последовательном опыте работы с устройствами..NET родной позволяет писать код с использованием управляемых языков и загружать MSIL как всегда. Однако приложения будут развернуты на конечных пользователях устройств как полностью автономный изначально скомпилированный код (когда .NET Род входит в производство) и не будет зависеть от .NET. Framework на целевом устройстве/машине. Как вы знаете, приложения .NET охватывают широкий спектр. Таким образом, мы вкладываем большие средства в полный .NET. Рамки также (например, мы только что выпустили CTP RyuJIT).

Часто задаваемые вопросы Microsoft.NET

Ответ 2

Вы можете думать о .NET Native как об эволюции технологии NGen, которую использует CLR для настольных ПК. Существует несколько основных способов, с помощью которых .NET Native и NGEN отличаются -

  • Зависимость времени выполнения. NGEN использует полную рабочую среду CLR,.NET Native использует рефакторизованную среду выполнения (mrt100_app.dll), которая является локальной. Временная среда .NET Native была реорганизована для перемещения большинства функций из приложения и в цепочку инструментов генерации кода. Это делает его намного меньше, больше платят за игру и (надеюсь) больше отлаживается во время выполнения. Приложение .NET Native также самодостаточно, что является полезным свойством для приложения.
  • Нативные отношения изображения - изображение NGEN тесно связано как с CLR, с которым оно работает, так и с NGEN-изображением его зависимых сборок. Это, например, приводит к тому, что почти все изображения NGEN нуждаются в регенерации, когда исправление ошибки выполняется в mscorlib.dll.
  • Местоположение компиляции. Цель .NET Native - создать собственный код в хранилище приложений. NGEN создает собственный код на устройстве конечного пользователя. Вы, конечно же, можете себе представить, что для некоторых классов устройств (например, телефонов, планшетов) вы бы скорее не теряли код генерации батареи от конечного пользователя. Компиляция в хранилище также позволяет .NET Native тратить больше времени на компиляцию, поэтому позволяет применять больше оптимизаций, чем может позволить NGEN.
  • Генератор кода. NGEN использует компилятор JIT для генерации кода..NET Native использует обратный конец компилятора Visual С++, что позволяет применять такие оптимизации, как автоматическая векторизация, которые слишком дороги для применения в случае JIT
  • Анализ всей программы - NGEN генерирует код для одной сборки за раз, что позволяет использовать изображение NGEN в нескольких контекстах приложения..NET Native генерирует код для всего пакета приложений, который позволяет применять более широкий набор оптимизаций (например, полностью отбрасывая код, который никогда не использовался во время выполнения). Это связано с рефакторированной структурой, которая позволяет этим оптимизациям ударять как можно больше.
  • IL Fallback - изображения NGEN содержат как собственный код, так и MSIL для сборки (среди других структур данных). Если во время выполнения происходит что-то, что заставляет CLR использовать собственный код, который он не может найти в изображении NGEN, он может вернуться в JITing. В предварительных предварительных версиях разработчика .NET. В собственном образе присутствует только собственный код. Это означает, что если код отсутствует в изображении, он никогда не будет выполняться во время выполнения.