26

Gran parte de nuestro código de publicación C# se genera con la opción 'Optimizar código' desactivada. Creo que esto es para permitir que el código creado en modo Release sea depurado más fácilmente.Beneficios de la opción 'Optimizar código' en Visual Studio compilación

Dado que estamos creando un software de escritorio bastante simple que se conecta a servicios web de fondo, (es decir, no una aplicación particularmente intensiva en el procesador), ¿qué ocurre si se espera algún tipo de rendimiento?

¿Y es probable que alguna plataforma particular se vea peor? P.ej. multiprocesador/64 bit.

+0

que he visto este error de ejecución en un _lot_ en las tiendas más antiguas que todavía están atrapadas con una cultura C/C++, ya que (afirman) estar tratando de cambiar a las tecnologías más nuevas. –

+0

@Greg D - Interesante, hubiera pensado que la cultura C++ preferiría la optimización, ¿o no es eso lo que querías decir? –

+1

@gt: la cultura C++ con la que me he encontrado con más frecuencia _claims_ prefiere la optimización y el "código rápido", pero la mayoría de estos reclamos se basan en la superstición y el miedo irracional a cualquier cosa nueva o diferente. No niego que la cultura a la que me refiero es disfuncional, pero creo que también está extendida fuera de esta tienda en particular.El número de personas que, a pesar de todas las pruebas en contrario, insiste en que _su_ código C++ tiene características de rendimiento superiores a algún código razonablemente escrito de C#, por ejemplo, es asombroso. Escuché "Administraré mi propia memoria, muchas gracias" con demasiada frecuencia. –

Respuesta

13

Los detalles completos están disponibles en http://blogs.msdn.com/jaybaz_ms/archive/2004/06/28/168314.aspx.

En breve ...

en código administrado, la fluctuación en el tiempo de ejecución hace casi toda la optimización. La diferencia en IL generada a partir de esta bandera es bastante pequeña.

+5

No estoy seguro de por qué esa cita es importante. Las optimizaciones de JITter se ven afectadas por la bandera, incluso si la IL generada no lo es, por lo que la bandera tendrá un impacto en el rendimiento. La pregunta original fue sobre la magnitud de esa diferencia. – phoog

2

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 haga un perfil de una versión no optimizada y una versión optimizada y compare los resultados.

+0

Noté que los depuradores saltan líneas cuando está presente. Esto en VS 2013 y 15 por cierto! A veces simplemente lo apago localmente para depuración. – arviman

6

De hecho, hay una diferencia, a veces bastante significativa. Lo que realmente puede afectar el rendimiento (ya que es algo que JIT no tiene plenamente cuidado de):

  • innecesarias las variables locales (es decir, grandes marcos de pila para cada llamada)
  • instrucciones condicionales demasiado genérico, JIT traduce ellos de una manera bastante directa.
  • ramificación innecesaria (que tampoco está bien servido por un JIT - después de todo, no tiene demasiado tiempo para hacer todas las optimizaciones inteligentes)

    lo tanto, si usted está haciendo algo numérica - encender la optimización . De lo contrario, no verá ninguna diferencia en absoluto.

26

Usted es la única persona que puede responder la pregunta "respuesta al rendimiento". Pruébelo de ambas formas, mida el rendimiento y vea qué sucede. El golpe podría ser enorme o podría ser inexistente; nadie que lea esto sabe si "enorme" para usted significa un microsegundo o veinte minutos.

Si usted está interesado en lo optimizaciones se realizan por el compilador de C# - en lugar de la fluctuación de fase - cuando el interruptor está en Optimizar, consulte:

http://blogs.msdn.com/ericlippert/archive/2009/06/11/what-does-the-optimize-switch-do.aspx

Cuestiones relacionadas