.net performance clr jit ngen

¿Hay alguna manera de cambiar el compilador.NET JIT para favorecer el rendimiento durante el tiempo de compilación?



performance clr (1)

Me preguntaba si hay alguna forma de cambiar el comportamiento del compilador .NET JIT, especificando una preferencia para optimizaciones más exhaustivas. De lo contrario, sería bueno si pudiera hacer algún tipo de optimización guiada por perfil, si no lo hace ya.


Esto se establece cuando compila su ensamblaje. Hay dos tipos de optimizaciones:

  • Optimización IL
  • Calidad del código nativo JIT.

La configuración predeterminada es esto

/optimize- /debug-

Esto significa IL no optimizado y código nativo optimizado.

/optimize /debug(+/full/pdbonly)

Esto significa IL no optimizado y código nativo no optimizado (mejor configuración de depuración).

Finalmente, para obtener el rendimiento más rápido:

/optimize+ /debug(-/+/full/pdbonly)

Esto produce IL optimizado y código nativo optimizado.

Al producir IL no optimizado, el compilador insertará las instrucciones NOP en todo el código. Esto hace que el código sea más fácil de depurar al permitir que los puntos de interrupción se establezcan en las instrucciones de flujo de control, como para, mientras, si, más, intenta, captura, etc.

El CLR hace un trabajo notablemente bueno al optimizar el código independientemente. Una vez que un método está JIT, el puntero de una llamada o una instrucción callvirt apunta directamente al código nativo.

Además, el CLR aprovechará cualquier trucos de arquitectura disponibles cuando JIT''ing su código. Esto significa que un ensamble ejecutado a través del JIT se ejecutará más rápido que un ensamblaje precompilado mediante el uso de Ngen (aunque con un tiempo de arranque ligeramente más lento), ya que NGen compilará para todas las plataformas y no aprovechará ningún truco.