2008-09-19 13 views

Respuesta

19

Esto se establece al compilar su conjunto. Hay dos tipos de optimizaciones:

  • optimización IL
  • calidad JIT código nativo.

El ajuste predeterminado es este

/optimize- /debug- 

Esto significa sin optimizar IL, y el código nativo optimizado.

/optimize /debug(+/full/pdbonly) 

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

Por último, para obtener el rendimiento más rápido:

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

Esto produce IL optimizado y optimizado código nativo.

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, por ejemplo, mientras, si, else, try, catch etc.

El CLR hace un trabajo notablemente bueno al optimizar el código. 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.

+3

+1 Agradable. ¿Dónde exactamente en el IDE estableces estos valores? – Trap

+1

En VS2010 (y versiones anteriores IIRC), habilite la configuración del proyecto "Optimizar código", que está activada por defecto en la configuración de Release. (Esto es equivalente a '/ optimize', que es equivalente a'/optimize + '.) Tenga en cuenta que el optimizador está [lejos de ser perfecto] (http://stackoverflow.com/questions/10369421/why-does-adding-local -variables-make-net-code-slower). –

+1

No hay trucos por máquina, AFAIK. Me han dicho que el equipo de .NET consideraba que mantener varias versiones del optimizador de JIT (que es una bestia MUY compleja) era demasiado costoso en comparación con el beneficio potencial. –

Cuestiones relacionadas