Лучшие практики NGen и Gacutil - PullRequest
7 голосов
/ 25 июня 2009

Я работал над приложением WinForms, которое имеет около 5 ссылочных сборок - написанных нами, и около 8 ссылочных сборок сторонними разработчиками (мы не будем надеяться обновить их в будущем, если что-то не пойдет не так, как надо - Infragistics / Компоненты DevExpress!).

Наше время стартапов на холодных ботинках слишком велико, и меня интересует, стоит ли добавлять их в Gac и создавать их.

Когда мы устанавливаем в кеш NGen, он тоже должен быть в gac? Какая связь между ними? К чему я должен стремиться? У нас есть один exe, я бы сделал ILMerge, но я не уверен, что это сработает в нашем сценарии - длинная история.

Кроме того, возможно ли узнать, сколько памяти занимает мой exe-файл - так же, как это делают приложения Java (например, Netbeans!)

Ответы [ 3 ]

5 голосов
/ 25 июня 2009

Основная идея для улучшения времени запуска - использовать отложенную инициализацию, когда это возможно. Не создавайте ненужные вещи сразу после запуска. Используйте шаблон lazy init . Также можно запустить работника фоновой инициализации после показа главной формы, чтобы выполнить некритическую инициализацию. И т. Д. И т. Д.

Вы также можете проверить следующую статью (Улучшение времени запуска приложения) .

0 голосов
/ 25 июня 2009

Если вы не используете 3.5 с пакетом обновления 1 (SP1) .NET Framework, вам следует рассмотреть возможность тестирования на этой платформе, чтобы увидеть, если вы получите разницу. Были сделаны улучшения, которые могут улучшить время запуска приложения: Оптимизация CLR в .NET Framework 3.5 SP1

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

Однако, скорее всего, вы получите самое значительное сокращение времени запуска, если будете искать конкретные узкие места в вашем конкретном приложении, а не находите быстрое решение в другом месте.

0 голосов
/ 25 июня 2009

Мне кажется, что определение вашей проблемы как-то подразумевает ваше решение ☺

Другими словами, как вы узнаете, что время загрузки зависит от загрузки сборок?

Что вам нужно сделать, это профилировать приложение и убедиться, что это так. Это возможно, но что, если происходит некоторая инициализация и вы слишком много внимания уделяете оптимизации не того места?

Здесь есть некоторые инструменты, которые должны помочь вам при профилировании неуправляемых приложений.

Поскольку вы говорите о приложениях Winforms, я предполагаю, что у вас есть Visual Studio. Если это так, вы можете использовать его профилировщик для своего управляемого приложения.

Удачи!

...