Как запретить NGEN перебазировать мой код (что негативно влияет на производительность)? - PullRequest
1 голос
/ 28 августа 2010

Я просто хочу ускорить свое клиентское приложение на базе .NET и рассматриваю возможность НГЕН-кода.

Джеффри Рихтер написал предупреждение о коде ngening:

• Низкая производительность по времени загрузки (Перебазирования). Когда Windows загружает NGend файл, он проверяет, если файл загружается на предпочтительной базе адрес. Если файл не может загрузить его предпочтительный базовый адрес, затем Windows перемещает файл, исправляя все адрес памяти ссылки. Это очень много времени, потому что Windows должна загрузить весь файл в память и изменять различные байты в файл. Для получения дополнительной информации о Перебазирование, пожалуйста, смотрите мою книгу: Приложения для программирования для Microsoft Windows, 4-е издание (Microsoft Press).

Поскольку я не очень разбираюсь в этой теме, что я должен знать, прежде чем начинать изменять настройки в своем проекте, и какие настройки мне следует изменить?

Ответы [ 3 ]

2 голосов
/ 29 августа 2010

Перемещение ваших DLL-библиотек происходит только во время загрузки, после загрузки дальнейших падений производительности из-за процесса перемещения нет.Конечно, в зависимости от количества и размера библиотек DLL (количество перемещений) время загрузки может существенно повлиять, что является проблемой, если ваше приложение часто запускается и останавливается.

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

Вот статья MSDN, в которой обсуждаются способыулучшить время запуска приложения.http://msdn.microsoft.com/en-us/magazine/cc163655.aspx

2 голосов
/ 11 апреля 2012

Согласно этому блогу Microsoft , "могут быть некоторые незначительные случаи, когда настройка базовых адресов в ОС Vista + имеет преимущество, но их можно в значительной степени игнорировать". Таким образом, хотя использование ngen улучшает время запуска, больше нет необходимости устанавливать базовые адреса, если вы не поддерживаете ОС до Vista. Это побочный эффект новой функции безопасности рандомизации макета адресного пространства.

1 голос
/ 28 августа 2010

NGEN позволяет указать базовый адрес (также отображается в настройках VS). Если вы собираетесь в NGEN, вы в основном хотите убедиться, что у вас нет перекрытия между библиотеками DLL. Если у вас есть перекрытие, то CLR будет вынужден перебазировать их, когда они загружены.

...