Помогает ли использование NGEN?

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

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

And, of course, Microsoft is working quite hard at improving the CLR and its JIT compiler so that it runs faster, produces more optimized code, and uses memory more efficiently. These improvements will take time. For developers that can't wait, the .NET Framework redistributable includes a utility called NGen.exe.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
18
0
9 763
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

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

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

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

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

Ana Betts 04.06.2009 08:52

Действительно ли ASP.NET использует сборку NGen?

foson 04.06.2009 08:55

Не могли бы вы подробнее рассказать о графиках Performance Manager? Если я погуглию, я нахожусь в рекурсии к этому сообщению :(

Christian Gollhardt 31.12.2016 18:40

@ChristianGollhardt: Я далек от эксперта, но если вы откроете Performance Manager, вы сможете добавлять графики для самых разных вещей.

Jon Skeet 31.12.2016 18:54

@JonSkeet - согласно Джеффу Рихтеру, NGen в ASP.NET или служебных библиотеках не должны получать никакого прироста производительности, поскольку они всегда загружаются как нейтральные к домену - см. Здесь в разделе «Игнорируемый файл NGen'd в некоторых сценариях загрузки домена» codeguru.com/csharp/.net/net_general/toolsand3rdparty/… Am I чего-то не хватает?

Dave Black 10.10.2018 01:00

@DaveBlack: Ну, помимо всего прочего, эта статья была написана в 2002 году. Это было во времена C# 1.0. С тех пор очень многое изменилось. (С тех пор, как я написал этот ответ, тоже очень многое изменилось. Ему почти 10 лет.) Все еще вполне возможно, что NGen не поможет обычному ASP.NET, но я предупреждаю: «Вы должны проверить, ровно ли время JIT значительный "по-прежнему актуален.

Jon Skeet 10.10.2018 09:08

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

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

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

Это было только в случае .NET framework 1.0 / 1.1. В версии 2.0 и новее образы в машинном коде могут совместно использоваться в доменах приложений. Посмотреть разные версии msdn.microsoft.com/en-us/library/6t9t5wcf.aspx

foson 02.06.2009 08:56

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

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

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

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

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

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

Empirical observations show that native images of the EF runtime assemblies can cut between 1 and 3 seconds of application startup time.

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

Другие вопросы по теме