¿Ayuda usar NGEN?

¿Es mejor utilizar NGEN una aplicación ASP.NET cuando sabemos que no va a cambiar mucho? ¿O es el JIT lo suficientemente bueno?

La única razón por la que pregunté fue porque este artículo de Jeffrey Richter en 2002 dice:

Y, por supuesto, Microsoft está trabajando bastante duro para mejorar el CLR y su comstackdor JIT para que funcione más rápido, produzca un código más optimizado y use la memoria de manera más eficiente. Estas mejoras tomarán tiempo. Para los desarrolladores que no pueden esperar, .NET Framework redistributable incluye una utilidad llamada NGen.exe.

NGen solo ayudará al tiempo de inicio; no hace que el código se ejecute más rápido de lo que lo haría después de JITting. De hecho, creo que hay algunas optimizaciones que NGen no hace, pero el JIT sí lo hace.

Entonces, la pregunta principal es: ¿tienes un problema con el tiempo de inicio? No sé qué parte del tiempo de inicio de una aplicación ASP.NET será JITting frente a otros costos, por cierto … probablemente debería mirar los gráficos de Performance Manager para el JIT para decirle cuánto tiempo le está costando realmente .

(En términos de disponibilidad, tener varios servidores para que pueda hacer reinicios rotativos le dará mucho más beneficio que un solo servidor con una aplicación web NGENed).

NGen no es el camino a seguir para ASP.NET – la creación de .dlls en la carpeta bin no es el último paso – se vuelven a comstackr con la configuración web / maching.config aplicada en su C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files . En lugar de NGen, para disminuir el tiempo de carga inicial, utilice la herramienta Publicar sitio web o aspnet_compiler.exe

No estoy seguro de que el principal beneficio de NGEN sea el tiempo de arranque solo: si la aplicación sufre un alto ‘ % de tiempo en JIT ‘, esto se menciona como un remedio potencial: http://msdn.microsoft.com/en -us / library / dd264972 (VS.100) .aspx .

La discusión está estrechamente relacionada con una pregunta diferente sobre cómo el código máquina JIT se almacena en caché y se vuelve a utilizar?

Estuve investigando esto esta noche y encontré lo siguiente:

El tiempo de ejecución de idioma común no puede cargar imágenes que crea con NGEN en el dominio de aplicación compartido. Debido a que los ensamblados estándar de ASP.NET se comparten y luego se cargan en un dominio de aplicación compartido, no puede usar Ngen.exe para instalarlos en la memoria caché de imágenes nativas en la computadora local. http://support.microsoft.com/kb/331979

¿No estoy seguro de si esto solo se refiere a los ensamblados a los que se hace referencia desde la aplicación ASP.net o la propia aplicación?

Sí, lo hace, este video de youtube lo demuestra en realidad Vídeo de ajuste de rendimiento NGEN.exe

Pero verifique la palabra de precaución, verifique y luego impleméntelo.

NGen ayuda al tiempo de inicio. Por ejemplo, la documentación de Entity Framework dice esto sobre el beneficio de ejecutar NGen:

Las observaciones empíricas muestran que las imágenes nativas de los ensamblajes de tiempo de ejecución de EF pueden reducir entre 1 y 3 segundos del tiempo de inicio de la aplicación.

El contexto es solo los ensamblados de Entity Framework. NGenning otras asambleas proporcionaría velocidad adicional.