Лучшие практики NGen и Gacutil
Я работал над приложением WinForms, которое имеет около 5 ссылочных сборок - написанных нами, и около 8 ссылочных сборок сторонними разработчиками (мы не будем надеяться обновить их в будущем, если что-то не пойдет не так - компоненты Infragistics/DevExpress!).
Время стартапов на холодных ботинках слишком велико, и меня интересует, стоит ли добавлять их в Gac и создавать их.
Когда мы устанавливаем в кеш NGen, он тоже должен быть в gac? Какая связь между ними? К чему я должен стремиться? У нас есть один exe, я бы сделал ILMerge, но я не уверен, что это сработает в нашем сценарии - длинная история.
Кроме того, возможно ли узнать, сколько памяти занимает мой exe-файл - так же, как и приложения Java (например, Netbeans!)
3 ответа
Основная идея для улучшения времени запуска заключается в использовании отложенной инициализации, когда это возможно. Не создавайте ненужные вещи сразу после запуска. Используйте ленивый шаблон инициализации. Также можно запустить работника фоновой инициализации после показа главной формы, чтобы выполнить некритическую инициализацию. И т. Д. И т. Д.
Вы также можете проверить следующую статью (Улучшение времени запуска приложения).
Мне кажется, что определение вашей проблемы как-то подразумевает ваше решение ☺
Другими словами, как вы узнаете, что время запуска зависит от загрузки сборок?
Что вы должны сделать, это профилировать приложение и убедиться, что это так. Это возможно, но что, если происходит некоторая инициализация и вы слишком много внимания уделяете оптимизации не того места?
Здесь есть несколько инструментов, которые должны помочь вам при профилировании неуправляемых приложений.
Поскольку вы говорите о приложениях Winforms, я предполагаю, что у вас есть Visual Studio. Если это так, вы можете использовать его профилировщик для вашего управляемого приложения.
Удачи!
Если вы не используете 3.5 с пакетом обновления 1 (SP1).NET Framework, вы должны рассмотреть возможность тестирования на этой платформе, чтобы увидеть, если вы получите разницу. Были сделаны улучшения, которые могут улучшить время запуска приложения: Оптимизация CLR в.NET Framework 3.5 SP1
В этой статье также есть несколько хороших общих рекомендаций, лучших рекомендаций ngen и хитростей, позволяющих избежать перебазирования ваших сборок (хотя для 5 или около того сборок, на которые вы работаете, не ожидайте чудес).
Однако, скорее всего, вы получите самое значительное сокращение времени запуска, если будете искать конкретные узкие места в вашем конкретном приложении, а не находите быстрое решение в другом месте.