Помогает ли использовать NGEN? - PullRequest
18 голосов
/ 22 декабря 2008

Лучше ли использовать NGEN приложение ASP.NET, когда мы знаем, что оно сильно не изменится? Или JIT достаточно хорош?

Единственная причина, по которой я спросил, была в том, что эта статья Джеффри Рихтера в 2002 году говорит:

И, конечно же, Microsoft довольно усердно работает над улучшением CLR. и его JIT-компилятор, чтобы он работал быстрее, производит более оптимизированный код, и использует память более эффективно. Эти улучшения потребуют время. Для разработчиков, которые не могут ждать, .NET Framework В распространяемый пакет входит утилита NGen.exe.

Ответы [ 6 ]

22 голосов
/ 22 декабря 2008

NGen поможет только время запуска - он не заставляет код выполняться быстрее, чем после JITting. Действительно, я считаю, что есть некоторые оптимизации, которые NGen не делает , но делает JIT.

Итак, главный вопрос: есть ли у вас проблемы со временем запуска? Я не знаю, сколько времени запуска приложения ASP.NET будет JITting по сравнению с другими затратами, кстати ... вам, вероятно, следует взглянуть на графики Performance Manager для JIT, чтобы сказать, сколько времени это действительно стоит .

(С точки зрения доступности, наличие нескольких серверов, позволяющих выполнять повторные перезапуски, даст вам гораздо больше преимуществ, чем один сервер с веб-приложением NGENed.)

8 голосов
/ 02 июня 2009

NGen не подходит для ASP.NET - создание .dll в папке bin не является последним шагом - они снова компилируются с настройками web / maching.config, примененными в вашем C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files папка. Вместо NGen, чтобы уменьшить начальное время загрузки, используйте инструмент публикации сайта или aspnet_compiler.exe

1 голос
/ 22 октября 2009

Я не уверен, что основным преимуществом NGEN является время запуска в одиночку - если приложение страдает от большого «% времени в JIT », это указано в качестве потенциального средства: http://msdn.microsoft.com/en-us/library/dd264972(VS.100).aspx.

Обсуждение тесно связано с другим вопросом о том, как машинный код JIT кэшируется и используется повторно?

0 голосов
/ 02 августа 2014

NGen помогает при запуске. Например, документация Entity Framework говорит о преимуществах использования NGen:

Эмпирические наблюдения показывают, что собственные образы сборок времени исполнения EF могут сократить время запуска приложения от 1 до 3 секунд.

Контекст - это только сборки Entity Framework. NСоздание других сборок обеспечит дополнительное ускорение.

0 голосов
/ 12 июня 2014

Да, это так, это видео на YouTube демонстрирует это на самом деле Видео о настройке производительности NGEN.exe

Но проверьте осторожность, проверьте, а затем внедрите его.

0 голосов
/ 29 мая 2009

Я смотрел на это сегодня вечером и наткнулся на следующее:

Среда выполнения общего языка не может загружать изображения, созданные с помощью NGEN, в общий домен приложения. Поскольку стандартные сборки ASP.NET являются общими и затем загружаются в общий домен приложения, вы не можете использовать Ngen.exe для их установки в собственный кэш образов на локальном компьютере. http://support.microsoft.com/kb/331979

Не уверен, относится ли это только к сборкам, на которые ссылается приложение ASP.net или само приложение?

...