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
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.
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.
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).
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.
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.
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.
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
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
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
- 1. ¿Cuál es la diferencia entre() vs [] vs {}?
- 2. EQU vs DC.B. ¿Cuál es la diferencia?
- 3. SET vs. SELECT - ¿Cuál es la diferencia?
- 4. CATALINA_OPTS vs JAVA_OPTS - ¿Cuál es la diferencia?
- 5. Char.IsDigit() vs Char.IsNumber(), ¿cuál es la diferencia?
- 6. node.js vs. meteor.js ¿cuál es la diferencia?
- 7. JIT vs Intérpretes
- 8. Cuál es la diferencia entre colorWithSRGBRed vs colorWithDeviceRed vs colorWithCalibratedRed
- 9. Paquete Java Vs Carpeta-Estructura? cuál es la diferencia
- 10. Cuál es la diferencia entre String (value) vs value.toString()
- 11. ¿Cuál es la diferencia entre gets.chomp() vs. STDIN.gets.chomp()?
- 12. ¿Cuál es la diferencia entre X = X ++; vs X ++ ;?
- 13. ¿Cuál es la diferencia entre Cassandra vs Oracle Coherence?
- 14. VSTO vs. Ensambles primarios de interoperabilidad, ¿cuál es la diferencia?
- 15. ¿Cuál es la diferencia entre "git reset" vs "git rebase"?
- 16. ¿Cuál es la diferencia entre Selenium's Remote Control vs WebDriver?
- 17. Bases de datos relacionales vs. dimensionales, ¿cuál es la diferencia?
- 18. Linq. Cualquier VS. Exists - ¿Cuál es la diferencia?
- 19. GWT VS Google Closure, ¿cuál es la diferencia?
- 20. Java war vs. jar: ¿cuál es la diferencia?
- 21. Datastore Category vs. String: ¿cuál es la diferencia?
- 22. ¿Cuál es la diferencia entre Console.WriteLine() vs Debug.WriteLine()?
- 23. ¿Cuál es la diferencia entre "origen maestro" vs "origen/maestro"
- 24. Método vs propiedad en C# - ¿cuál es la diferencia
- 25. WPF Panel.Children vs Panel.InternalChildren - ¿Cuál es la diferencia?
- 26. git clone vs copy paste, ¿cuál es la diferencia?
- 27. Factory Girl vs. User.create: ¿cuál es la diferencia?
- 28. git project vs repository, ¿cuál es la diferencia fundamental?
- 29. -ms-filter vs filter ¿Cuál es la diferencia?
- 30. ¿Cuál es la diferencia entre html.AttributeEncode vs html.Encode?
¿Cuál es la necesidad de 'JIT' en absoluto cuando tenemos NGEN? – Imad