visual studio rendimiento muy mejorar lento improve faster como acelerar visual-studio optimization

visual-studio - rendimiento - visual studio faster



¿Qué es lo que realmente hace la opción "Optimizar código" en Visual Studio? (3)

El nombre de la opción dice algo, pero ¿qué es lo que Visual Studio / compiler realmente hace y cuáles son las consecuencias reales?

Editar: Si busca en google, puede encontrar esta dirección , pero realmente no estoy buscando. Me pregunto qué pasarán las cosas reales. Por ejemplo, ¿por qué los bucles obtienen menos tiempo, etc.


Desde el blog de Paul Vick :

  • Elimina cualquier instrucción NOP que de otro modo emitiríamos para ayudar en la depuración. Cuando las optimizaciones están desactivadas (y la información de depuración está activada), el compilador emitirá las instrucciones NOP para las líneas que no tienen ninguna IL real asociada a ellas pero en las que quizás desee poner un punto de interrupción. El ejemplo más común de algo como esto sería el "Fin si" de una declaración "Si" - no hay IL real emitida para un Fin si, por lo que no emitimos un NOP, el depurador no le permitirá establecer un punto de corte en eso. Activar las optimizaciones obliga al compilador a no emitir los NOP.

  • Hacemos un análisis de bloque básico simple de la IL generada para eliminar cualquier bloque de código muerto. Es decir, dividimos cada método en bloques de IL separados por instrucciones de derivación. Al hacer un análisis rápido de cómo se interrelacionan los bloques, podemos identificar cualquier bloque que no tenga ramas en ellos. Por lo tanto, podemos descubrir bloques de código que nunca se ejecutarán y pueden omitirse, lo que hace que el conjunto sea un poco más pequeño. También realizamos algunas optimizaciones de rama menores en este punto también, por ejemplo, si usted va a otra declaración de GoTo, simplemente optimizamos el primer GoTo para saltar al segundo objetivo de GoTo.

  • Emitimos un DebuggableAttribute con IsJITOptimizerDisabled establecido en False. Básicamente, esto permite que el JIT en tiempo de ejecución optimice el código de la forma que considere adecuada, incluyendo el reordenamiento y la incorporación del código. Esto producirá un código más eficiente y más pequeño, pero significa que intentar depurar el código puede ser muy desafiante (como cualquiera que lo haya intentado le dirá). La lista real de cuáles son las optimizaciones de JIT es algo que no sé, quizás alguien como Chris Brumme se presente en algún momento al respecto. Lo peor es que el conmutador de optimización permite optimizaciones que pueden dificultar el establecimiento de puntos de interrupción y recorrer su código.


La respuesta corta es: use -Ox y deje que el compilador haga su trabajo.

La respuesta larga: el efecto de diferentes tipos de optimizaciones es imposible de predecir con precisión. En ocasiones, la optimización del código rápido generará un código más pequeño que al optimizar el tamaño. Si realmente desea obtener el último 0,01% de rendimiento (en velocidad o tamaño), debe comparar diferentes combinaciones de opciones.

Además, las versiones recientes de Visual Studio tienen opciones para optimizaciones más avanzadas, como la optimización del tiempo de enlace y la optimización guiada por perfil.


Sin optimizaciones, el compilador produce un código muy tonto: cada comando se compila de una manera muy directa, de modo que hace lo que se pretende. Las compilaciones Debug tienen deshabilitadas las optimizaciones de manera predeterminada, ya que sin las optimizaciones el ejecutable producido coincide con el código fuente de una manera directa.

Variables guardadas en registros

Una vez que activa las optimizaciones, el compilador aplica muchas técnicas diferentes para hacer que el código se ejecute más rápido sin dejar de hacer lo mismo. La diferencia más obvia entre compilaciones optimizadas y no optimizadas en Visual C ++ es el hecho de que los valores variables se mantienen en los registros el mayor tiempo posible en compilaciones optimizadas, mientras que sin optimizaciones siempre se almacenan en la memoria. Esto afecta no solo la velocidad del código, sino que también afecta la depuración. Como resultado de esta optimización, el depurador no puede obtener de forma fiable un valor variable a medida que avanza por el código.

Otras optimizaciones

Hay varias otras optimizaciones aplicadas por el compilador, como se describe en / O Opciones (Código de Optimize) MSDN docs . Para una descripción general de varias técnicas de optimización, consulte el artículo de Wikipedia Compiler Optimization .