Me preguntaba si hay alguna manera de cambiar el comportamiento del compilador .NET JIT, especificando una preferencia para optimizaciones más detalladas. De lo contrario, sería bueno si pudiera hacer algún tipo de optimización guiada por perfil, si no lo hace ya.¿Hay alguna forma de cambiar el compilador .NET JIT para favorecer el rendimiento durante el tiempo de compilación?
Respuesta
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.
- 1. ¿Hay alguna forma de obtener el compilador .NET JIT o C# para optimizar los bucles for-out vacíos?
- 2. Detección de versiones del compilador durante el tiempo de compilación
- 3. ¿Hay alguna forma de engañar al compilador .net JIT para ejecutar otro método?
- 4. Forzar el compilador .NET JIT para generar el código más optimizado durante la puesta en marcha de la aplicación
- 5. ¿Hay alguna forma de mejorar el rendimiento multinúcleo/multiprocesador del compilador Java?
- 6. ¿Hay alguna forma de mostrar el tiempo de compilación de una solución completa en Visual Studio?
- 7. ¿Por qué el orden de JIT afecta el rendimiento?
- 8. ¿El uso de espacios de nombres afecta el rendimiento o el tiempo de compilación?
- 9. ¿Hay alguna manera de acelerar el ciclo de edición-compilación-depuración en asp.net?
- 10. ¿Hay alguna forma de 'resaltar' el código?
- 11. ¿Qué tipo de optimizaciones hacen tanto el compilador de C# como el JIT?
- 12. ¿Hay alguna forma de serializar el objeto linq para Memcached?
- 13. ¿Existen atributos que afecten cómo se optimiza el CLR durante una compilación JIT?
- 14. ¿Hay alguna forma de pasar el iPhone?
- 15. ¿Cómo evitar perder el tiempo durante la compilación durante el desarrollo?
- 16. ¿Hay alguna manera de mostrar el atributo de título de un elemento html durante más tiempo?
- 17. ¿Cómo un compilador JIT ayuda al rendimiento de las aplicaciones?
- 18. ¿El compilador .NET JIT genera código diferente para parámetros genéricos con diferentes enumeraciones?
- 19. Hacer un compilador JIT
- 20. Optimización del compilador de Java durante una compilación Maven?
- 21. ¿Hay alguna forma de usar @ Html.HiddenFor para el modelo completo?
- 22. ¿Hay alguna forma de pasar el contexto para vincular jQuery?
- 23. ¿Hay alguna forma de reducir el malloc/libre de ostringstream?
- 24. Cambiar tamaño de la pila para una aplicación C++ en Linux durante la compilación con el compilador GNU
- 25. ¿Hay alguna forma de revertir los efectos del compilador de cierre (o similares) en el código?
- 26. ¿Cómo se compilan los genéricos mediante el compilador JIT?
- 27. ¿Alguna forma de eliminar el retraso de tiempo con sshfs?
- 28. ¿Es posible cambiar el valor de una variable durante el tiempo de ejecución?
- 29. 64bit .NET Ajuste de rendimiento
- 30. ¿A qué nivel el compilador de C# o JIT optimizan el código de la aplicación?
+1 Agradable. ¿Dónde exactamente en el IDE estableces estos valores? – Trap
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). –
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. –