2009-03-24 11 views
5

Siempre he creído que las versiones de Debug son más lentas que las compilaciones de Release, ya que el compilador necesita generar adicionalmente información del depurador. Recientemente me sorprendió escuchar a uno de mis colegas decir que las compilaciones de lanzamiento suelen tardar más tiempo. (Creo que es solo debido a la vinculación/compilación incremental).Release vs Debug Build Times

En general, ¿cuál de los dos es más rápido?

Respuesta

13

Bueno, hay una serie de variables que podrían afectar las cosas. Estos son algunos de los motivos por los que Debug podría ser más rápido:

  • Normalmente, el modo de depuración optimiza mucho menos, ya que puede arruinar la asignación entre las instrucciones y las líneas de código. Entonces, el compilador está haciendo menos trabajo allí.
  • Incluso si una compilación de depuración completa es más lenta, las compilaciones de depuración suceden con mucha más frecuencia y, por lo general, pueden aprovechar las compilaciones incrementales mucho más que la compilación Release build. Por lo tanto, con bastante frecuencia, una compilación de depuración no tiene que hacer casi tanto trabajo como lo haría una compilación de versión.
0

Solo supongo, pero supongo que la versión de lanzamiento tardaría más en la mayoría de los casos debido a la optimización.

0

Las compilaciones de depuración suelen ser más rápidas porque no se realiza ninguna optimización (que es muy común en versiones de lanzamiento).

Puede optar por no generar símbolos de depuración con su ejecutable y sin optimización, pero eso sería extraño para una compilación de lanzamiento. Aunque se construiría más rápido, creo.

La diferencia principal entre depuración y liberación es que la depuración se entiende para la depuración (lo que incluye símbolos de depuración) y el lanzamiento está destinado a correr más rápido, por lo que utilizar una fuerte optimización

1

En general, yo esperaría que una compilación de depuración será más rápida de compilar, pero más lenta de ejecutar y una compilación de lanzamiento que tardará más en compilarse, pero el resultado final se ejecutará más rápido.

Esto se debe a que el release buid probablemente tenga optimizaciones más agresivas y estas pueden interferir con la depuración. Además, algunas optimizaciones a gran escala demoran mucho tiempo. El tiempo para insertar información de depuración en los archivos del objeto es lo suficientemente pequeño como para ser ignorable, probablemente tome menos tiempo que leer el código fuente del disco en primer lugar.

0

La razón principal de las versiones de lanzamiento será más rápida es que el compilador hace una gran cantidad de optimización en ellos. Por ejemplo, puede desenrollar bucles, eliminar variables innecesarias y funciones en línea. La optimización no es una tarea trivial y requiere mucho poder de cómputo, lo que ralentiza la construcción.

La mayoría de los compiladores le permitirán desactivar la optimización de compilaciones de versiones. Prueba esto. Tus tiempos de construcción se reducirán. También puede activar la optimización en las construcciones de depuración y ver cómo aumentan sus tiempos de construcción.

Cuestiones relacionadas