Скажу сразу: мне не нужно отказываться от платформы .NET =)
И вопрос не о том, как получить независимый от фреймворка код.
Итак, есть весомое бизнес-приложение на C# с использованием Windows Forms.
В приложении десятки различных диалоговых окон под разные нужды, уведомления о событиях трее и контекстные меню.
По хорошей традиции всё это транслируется в машинный код во время исполнения и занимает время.
Первое открытие диалогового окна, появление контекстного меню, навигация по верхнему меню - всё это занимает время и вполне ощутимо подвисает.
Разумеется, после активной работы с приложением подтормаживания исчезают.
Но это повторяется раз за разом.
Вопрос:
Я читал, что с помощью утилиты ngen можно заранее на целевой машине транслировать байт-код в машинный. Поискал на MSDN, нашел парочку примеров, в том числе смотрел через ngen /?
Попробовал применить к сборке.
Утилита отрабатывает, но результата нет: работает как работало, с медленным запуском и подтормаживанием при первой работе.
А теперь вопрос: как ей правильно пользоваться, чтобы в итоге получить корректную сборку на целевой машине?
1) ngen нужно применить к головному exe файлу и всем библиотекам вашей программы (сторонние библиотеки -- по желанию).
2) ngen применяется на компьютере конечного пользователя (например, как подсказали выше, во время инсталляции). Запустить ngen у себя на машине, а потом скопировать приложение пользователю -- так работать не будет.
Ну и чтобы убедиться, что во время работы приложения подгружаются действительно нативные сборки, воспользуйтесь Fuslogvw.exe из состава Visual Studio, документация есть на сайте MSDN.
Скорее всего вы неправильно применили утилиту. Обычно она запускается во время установки и помещает в кеш уже готовую и задеплоеную сборку. А если вы запускаете на дебаг версии, то вероятно кеш не будет использован.