c# - rendimiento - Beneficios de la opción ''Optimizar código'' en la compilación de Visual Studio
visual studio 2017 mas rapido (5)
Gran parte de nuestro código de lanzamiento de C # está construido con la opción ''Optimizar código'' desactivada. Creo que esto es para permitir que el código incorporado en el modo Release se pueda depurar más fácilmente.
Dado que estamos creando un software de escritorio bastante simple que se conecta a los servicios web backend (es decir, no es una aplicación que requiera un uso intensivo del procesador), ¿qué sucede si se espera algún tipo de impacto en el rendimiento?
¿Y es probable que alguna plataforma en particular se vea peor afectada? P.ej. multiprocesador / 64 bit.
De hecho, hay una diferencia, a veces bastante significativa. Lo que realmente puede afectar el rendimiento (ya que es algo de lo que JIT no se ocupa completamente):
- Variables locales innecesarias (es decir, marcos de pila más grandes para cada llamada)
- Instrucciones condicionales demasiado genéricas, JIT las traduce de una manera bastante directa.
Ramificación innecesaria (también no es bien servida por un JIT; después de todo, no tiene mucho tiempo para hacer todas las optimizaciones inteligentes)
Entonces, si estás haciendo algo numérico, activa la optimización. De lo contrario no verás ninguna diferencia en absoluto.
Encuentro que con código complejo e intensivo de CPU (el código que estoy usando es una simulación de Monte Carlo que puede generar suficientes subprocesos para que el 100% utilice una computadora. Esto se probó en un entorno de 36 núcleos). El impacto de rendimiento puede ser de hasta 4 veces más alto! Una simulación que toma 2 horas tomará aproximadamente 9 horas sin el indicador de optimización. (Las rutas son aproximadamente 500,000 y para cada ruta hay 500 pasos para alrededor de 2000 objetos diferentes con cálculos altamente complejos en cada objeto).
Las optimizaciones realizadas por el compilador son bastante bajas y no deberían afectar la experiencia de los usuarios.
Si desea cuantificar la optimización en su aplicación, simplemente perfile una compilación optimizada y no optimizada y compare los resultados.
Los detalles completos están disponibles en http://blogs.msdn.com/jaybaz_ms/archive/2004/06/28/168314.aspx .
En breve...
En el código administrado, el JITter en el tiempo de ejecución realiza casi toda la optimización. La diferencia en la IL generada de esta bandera es bastante pequeña.
Usted es la única persona que puede responder la pregunta de "éxito de rendimiento". Pruébelo en ambos sentidos, mida el rendimiento y vea qué sucede. El golpe puede ser enorme o inexistente; nadie que lea esto sabe si "enorme" significa para ti un microsegundo o veinte minutos.
Si está interesado en qué optimizaciones realiza el compilador de C #, en lugar del jitter, cuando el interruptor de optimización está activado, consulte:
http://blogs.msdn.com/ericlippert/archive/2009/06/11/what-does-the-optimize-switch-do.aspx