2009-03-24 12 views
5

Ho sempre creduto che le build di Debug siano più lente delle build di Release dal momento che il compilatore ha bisogno di generare anche informazioni di debugger. Sono stato recentemente sorpreso di sentire uno dei miei colleghi dire che le build di rilascio richiedono in genere più tempo. (Credo che sia solo a causa del collegamento incrementale/compilazione).Release vs Debug Build Times

In generale, quale delle due è più veloce?

risposta

13

Bene, ci sono un certo numero di variabili che potrebbero influenzare le cose. Ecco alcuni motivi di debug potrebbe essere più veloce:

  • Di solito la modalità di debug fa molto meno ottimizzazioni, come quelli può rovinare la mappatura tra le istruzioni e le linee di codice. Quindi, il compilatore sta facendo meno lavoro lì.
  • Anche se una build di debug completo è più lenta, le build di Debug avvengono molto più spesso e solitamente possono trarre vantaggio da build incrementali molto più di una build di Release. Quindi, abbastanza spesso una build di Debug non deve fare lo stesso lavoro di una build di Release.
0

Solo un'ipotesi, ma suppongo che la creazione del rilascio richiederebbe più tempo nella maggior parte dei casi a causa dell'ottimizzazione.

0

Le build di debug sono in genere più veloci perché non viene eseguita alcuna ottimizzazione (che è molto comune nelle versioni di rilascio).

È possibile scegliere di non generare simboli di debug con il file eseguibile e senza ottimizzazione, ma sarebbe strano per una build di rilascio. Anche se avrebbe costruito più velocemente, credo.

La differenza principale tra debug e di uscita è quella di debug è significato per il debug (quindi include i simboli di debug) e di uscita è destinato a correre più veloce, in modo da utilizzare una forte ottimizzazione

1

Nel complesso, mi aspetto che una build di debug sarà più veloce da compilare, ma più lenta da eseguire e una build di rilascio richiede più tempo per essere compilata, ma il risultato finale sarebbe più veloce.

Questo è dovuto al rilascio generato probabilmente con ottimizzazioni più aggressive e questi possono interferire con la debugabilità. Inoltre, alcune ottimizzazioni su larga scala richiedono molto tempo. Il tempo per inserire le informazioni di debug nei file oggetto è abbastanza piccolo da essere ignorabile, probabilmente ci vuole meno tempo rispetto alla lettura del codice sorgente dal disco in primo luogo.

0

Il primo motivo per cui le versioni di rilascio saranno più veloci è che il compilatore esegue molte ottimizzazioni. Ad esempio, può srotolare i loop, rimuovere le variabili non necessarie e le funzioni inline. L'ottimizzazione non è un compito banale e richiede molta potenza di calcolo, rallentando così la costruzione.

La maggior parte dei compilatori consente di disattivare l'ottimizzazione delle versioni di rilascio. Prova questo. I tempi di costruzione si ridurranno. Puoi anche attivare l'ottimizzazione sui build di debug e vedere i tempi di costruzione scalare.