Лучшие практики NGen и Gacutil

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

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

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

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


person Community    schedule 25.06.2009    source источник
comment
Возможно, вы захотите покопаться с профилировщиком, чтобы сначала увидеть, что вызывает медлительность. ANTS (от RedGate) — хороший.   -  person Pondidum    schedule 25.06.2009


Ответы (3)


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

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

person arbiter    schedule 25.06.2009
comment
+1 за статью CLR Inside Out об улучшении времени запуска приложения. Очень полезно. (Тем не менее, вы должны включить название статьи в свою гиперссылку — я почти не нажимал на нее.) - person dthrasher; 08.07.2009

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

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

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

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

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

Удачи!

person Ariel    schedule 25.06.2009

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

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

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

person Dan    schedule 25.06.2009