2011-04-02 14 views
30

Por lo tanto, cuando el tiempo de ejecución CLR carga un ensamblado .NET, lo compila en el código nativo de la máquina. Este proceso se llama JITing. NGen es también el proceso de compilación del ensamblado .NET en el código nativo. No entiendo cuál es la diferencia entre dos?JIT vs NGen: ¿cuál es la diferencia?

Respuesta

31

La diferencia es cuando se producen. La compilación de JIT ocurre mientras tu programa se está ejecutando. NGen se realiza normalmente en el momento de la instalación de su programa y ocurre antes de que se ejecute su programa. Uno de los objetivos de NGen es eliminar la penalización JIT del inicio de la aplicación.

+0

¿Cuál es la necesidad de 'JIT' en absoluto cuando tenemos NGEN? – Imad

6

De MSDN ...

El Generador de imágenes nativas (Ngen.exe) es una herramienta que mejora el rendimiento de las aplicaciones administradas. Ngen.exe crea imágenes nativas, que son archivos que contienen código máquina compilado específico del procesador, y las instala en la caché de imágenes nativas en la computadora local. El tiempo de ejecución puede usar imágenes nativas del caché en lugar de usar el compilador Just-In-Time (JIT) para compilar el ensamblaje original.

http://msdn.microsoft.com/en-us/library/6t9t5wcf(v=VS.100).aspx

Básicamente NGen le permite pre-JIT y la memoria caché del conjunto de la máquina local. Esto permite un inicio más rápido y, en ocasiones, la ejecución.

15

JIT solo se realiza por método; no JIT todo ... Solo los bits que necesitas. Por supuesto, esto tiene un impacto pequeño pero medible la primera vez en un método (más genéricos, etc.). NGEN hace esto por adelantado, pero debe hacerse en la misma plataforma/arquitectura, etc. - esencialmente esa máquina. Esto también significa agregarlo al GAC, etc., que puede necesitar un mayor acceso.

En muchos casos, JIT está bien, especialmente si la aplicación está abierta durante mucho tiempo (servidores web, por ejemplo).

3

Muchos detalles omitidos aquí, pero:

Jit no es tan ... Jit es Just-In-Time, lo que significa que no quede compilado a código nativo hasta que el código, tales como un método, en realidad se invoca. Solo hay talones hasta entonces. Esto se mantendrá en la memoria caché para que las llamadas posteriores al método no vuelvan a generar el código nativo.

NGen hace todo el conjunto a la vez. NGen lo hace todo a la vez para que no se requiera Jitting.

8

Una diferencia muy importante que aún no se ha mencionado es que las imágenes en caché nativas tienen "páginas de códigos compartidos", lo que hace una gran diferencia en la huella de memoria de las aplicaciones que ejecutan Terminal Services o Citrix.

Lo fundamental para entender sobre NGEN es que mientras que compila el código, también marca las páginas de códigos como compartible, de modo que las múltiples instancias de su aplicación pueden compartir partes del espacio de memoria utilizada por la primera instancia. Y eso es realmente útil si se está ejecutando en Servicios de Terminal Server.

http://blogs.msdn.com/b/morgan/archive/2009/03/07/developing-net-applications-for-deployment-on-terminal-services-or-citrix.aspx.

Esto tiene implicaciones muy importantes para las aplicaciones que utilizan múltiples usuarios en una sola máquina, ya que comparten memoria en los procesos.Esto puede provocar problemas de gestión de recursos y comportamiento muy extraños y difíciles de reproducir si las memorias caché de imágenes no se mantienen correctamente.

+1

Esto también es relevante si ejecuta> 100 instancias del mismo trabajador en la misma máquina (cuando los procesos son preferibles a los subprocesos debido a una mejor aislamiento/estabilidad). – mbx

+0

El uso compartido de memoria también se aplica a los jardines web, donde el mismo sitio se carga varias veces en procesos W3WP.exe separados. ¿JIT todavía no permite compartir la memoria? – Brain2000

+0

Realmente, este beneficio se aplica * siempre que * tenga muchos procesos cargando el mismo binario (ejecutable o no) en el mismo CLR con las mismas versiones de biblioteca en la misma máquina, sin importar el motivo por el que las tenga. – SamB

Cuestiones relacionadas