Может ли приложение .NET быть скомпилировано для нативного? - PullRequest
8 голосов
/ 10 октября 2008

Просто интересно, можно ли заранее скомпилировать приложение .NET в машинный код? Я не планирую делать это, даже если бы смог; Мне просто любопытно.

Спасибо

Ответы [ 4 ]

11 голосов
/ 10 октября 2008

Вы можете использовать NGen для его предварительной компиляции, но это все еще зависит от .NET Framework. Salamander от Remotesoft (коммерческое приложение) может сделать приложение без фреймворка.

5 голосов
/ 10 октября 2008

Вы МОЖЕТЕ скомпилировать IL в собственные двоичные файлы. Есть продукты, которые делают это.

Большой вопрос, если вы ...

Если вы хотите удалить все зависимости dot net для работы без dot net

По сути, эти продукты прекомпилируются до уровня машины (обычно x86), а затем статически включают все необходимые библиотеки в вашем exe-файле. Это обычно приводит к огромному Exe. И, что более важно, у вас сейчас нет времени выполнения на вашей целевой машине. У вас есть часть времени выполнения, которую встроенный компилятор решил включить.

Если вы хотите просто ускорить время JIT

Вы также можете использовать NGen для компиляции его в собственный двоичный файл, но у вас все еще есть все зависимости в точечной сети. Целевые машины все еще нуждаются в каркасе и т. Д.

Но, когда вы начинаете, вы теряете возможность для приложения автоматически продвигать до 64 бит. Если ваше приложение предварительно скомпилировано, вам нужно включить один режим. Если пользователь работает на 64-битной машине, ваш IL-код был бы повышен (если вы не отметили его как не отмеченный).

Время JIT - не самое большое узкое место в большинстве приложений. Это загрузка библиотек фреймворка и других связанных требований.

Если вам это действительно нужно, вы можете использовать ngen в приложении настройки, чтобы получить целевой компьютер для текущих пользователей.

Я также недавно узнал, что вы не можете NGEN приложение и ожидаете, что оно будет использовать преимущества процессора, как вы можете с JIT. Когда вы запускаете NGEN, он всегда оптимизирует вывод для PentiumPro по какой-то причине и не использует преимущества таких вещей, как SSE, SSE2 и т. Д. Поэтому я бы сказал, что NGEN удаляется как разумный вариант использования.

1 голос
/ 19 января 2010

Mono имеет Ahead of Time (AOT) компилятор , который может генерировать собственный код.

1 голос
/ 10 октября 2008

ngen можно использовать для «предварительного JIT» образа, поэтому он доступен на диске в собственном виде для сокращения времени запуска приложения.

...