Visualizzazione dei tempi di compilazione in Visual Studio?


177

Il nostro server di compilazione impiega troppo tempo per realizzare uno dei nostri progetti C ++. Utilizza Visual Studio 2008. Esiste un modo per ottenere devenv.com per registrare il tempo impiegato per creare ciascun progetto nella soluzione, in modo da sapere dove concentrare i miei sforzi?

L'hardware migliorato non è un'opzione in questo caso.

Ho provato a impostare la verbosità dell'output (in Strumenti / Opzioni / Progetti e soluzioni / Build and Run / MSBuild build build output verbosity). Ciò non sembra avere alcun effetto sull'IDE.

Quando si esegue MSBuild dalla riga di comando (e, per Visual Studio 2008, deve essere MSBuild v3.5), visualizza il tempo totale trascorso alla fine, ma non nell'IDE.

Volevo davvero un rapporto sul tempo per ogni progetto nella soluzione, in modo da poter capire dove il processo di compilazione stava prendendo il suo tempo.

In alternativa, dal momento che utilizziamo effettivamente NAnt per guidare il processo di compilazione (usiamo Jetbrains TeamCity), c'è un modo per convincere NAnt a dirmi il tempo impiegato per ogni passaggio?

Risposte:


205

Strumenti menu → OpzioniProgetti e soluzioniImpostazioni progetto VC ++Creazione tempistica dovrebbe funzionare.


78
Si potrebbe pensare che sia in "Build and Run", ma nooooo, sarebbe stato così semplice
Thomas Bonini,

6
Se l'avessero messo lì, qualcun altro si sarebbe lamentato che non è dove si aspetterebbe che fosse. Il posto più ovvio per dirlo è diverso per i diversi utenti.
JesperE,

4
Qual è l'output di questo?
Colonnello Panic,

4
@AndreasBonini: Sotto Build and Run troverai il progetto MSBuild build output v̱erbosity che puoi impostare sopra Minimal anche per ottenere i tempi.
Joey,

4
Questo è utile per la profilazione di singole attività all'interno di una fase di compilazione, ma non fornisce riepiloghi dell'intera build.
Fernando Gonzalez Sanchez,

88

Vai su Strumenti → Opzioni → Progetti e soluzioni → Crea ed esegui → Complessità dell'output di compilazione del progetto MSBuild: impostato su "Normale" o "Dettagliato" e il tempo di compilazione verrà visualizzato nella finestra di output.


2
Prima di Visual Studio 2010, i progetti Visual C ++ non utilizzavano MSBuild, quindi questa impostazione non ha alcun effetto. Funziona bene anche per altri tipi di progetto.
Roger Lipscombe,

23
impostare su "Normale" invece di "Dettagliato" è sufficiente :)
andrecarlucci il

7
Impostarlo su Normale è davvero ciò che la maggior parte vorrebbe perché VC ++ Project Settings -> Build Timing mostra troppi dettagli
Ghita,

1
Questo è esattamente ciò che la maggior parte delle persone desidera: tempo totale e non che ClCompile abbia impiegato 22424 ms in uno dei progetti. Ctrl + Q, crea ed esegui <Invio> e cambia prima il "minimo" in "normale".
Tomasz Gandor,

36

Visual Studio 2012-2019

  • Per i progetti MSBuild (ad es. Tutti i progetti .Net): fare
    clic su, Tools -> Optionsquindi selezionare Projects and Solutions -> Build and Run. Cambia MSBuild project build output verbosityin Normal. Quindi visualizzerà il tempo trascorso in ogni progetto di soluzione che costruisce. Sfortunatamente non vi è alcuna somma del tempo trascorso su tutto il progetto. Vedrai anche il timestamp di avvio avviato

  • Progetto FOR C / C ++:

Fare clic Tools -> Optionse quindi selezionare Projects and Solutions -> VC++ Project Settings.

Cambia Build Timingin Yes.


4
La soluzione che mi hai offerto funziona anche su VS 2015 per un progetto C ++. Inoltre, ho scelto di utilizzare questa soluzione anziché Build Timingpoiché visualizza solo il tempo totale.
O B

1
Nessuna modifica con VS2019. Il "tempo trascorso" totale viene mostrato per tutti i progetti MSBuild (incluso C / C ++).
Farway,


6

Se sei bloccato su VS2005 potresti usare il plugin vs-build-timer . Al completamento di una build mostra il tempo totale impiegato e un riepilogo (facoltativo) di ciascuna delle durate del progetto.

Esclusione di responsabilità; L'ho scritto io. E sì, devo creare un programma di installazione ... un giorno!


Il tuo programma di installazione è disponibile
Martin,

6

Strumenti-> Opzioni-> Progetti e soluzioni-> Crea ed esegui->

Impostare "verbosità dell'output di build del progetto MSBuild" da "Minimo" a "Normale"


4

Se vuoi visualizzare la tua build puoi usare IncrediBuild. IncrediBuild è ora disponibile in modalità standalone (non distribuito ma per l'utilizzo solo su 8 core sul computer locale) gratuitamente come parte di Visual Studio 2015 Update 1

Disclaimer: lavoro per IncrediBuild


4

Poiché la tua domanda riguarda l'uso di DevEnv dalla riga di comando, suggerirei anche di utilizzare MSBuild (che può creare file .sln senza modifiche).

msbuild /fl /flp:Verbosity=diagnostic Your.sln

msbuild /? ti mostrerà altre opzioni utili per il filelogger.


4

Ho creato un'estensione per misurare i tempi di costruzione e presentare l'ordine degli eventi in un grafico: Visual Studio Build Timer .

inserisci qui la descrizione dell'immagine

È disponibile sul mercato di Visual Studio e funziona per VS2015, VS2017 e VS2019.

Trovo la presentazione visiva abbastanza utile. Oltre a mostrare quali progetti impiegano più tempo, mostra anche dipendenze tra di loro, vale a dire progetti che attendono il completamento degli altri prima di iniziare. In questo modo è possibile individuare i colli di bottiglia nella build e vedere quali dipendenze devono essere interrotte per aumentare la parallelizzazione della build.


3
Potresti aggiornarlo per supportare VS 2019
Konstantin Chernov

3
Sono un po 'occupato in questi giorni, ma è nei miei piani.
opetroch

2

Sono finito qui perché volevo solo che la data e l'ora fossero incluse nell'output di compilazione. Se altri sono alla ricerca di qualcosa di simile, è semplice come aggiungere echo %date% %time%agli eventi Pre-build e / o Post-build nel progetto, ProprietàCompilaCrea eventi .


2

Crea prima una build e vedi quale progetto appare per primo nell'output di build ( Ctrl+ Homenella finestra di output). Fare clic con il tasto destro del mouse sul progetto → Proprietà progettoCompilaCrea eventiPre-build . E echo ###########%date% %time%#############.

Quindi ogni volta che vedi i risultati di compilazione (o durante la compilazione) fai Ctrl+ Homenella finestra di output. E da qualche parte in quella zona l'ora e la data ti fissano in faccia!

Oh, potresti finire per aggiungere questi dettagli a molti progetti poiché l'ordine di costruzione può cambiare :)


Ho trovato una soluzione migliore! ###

StrumentiOpzioniProgetti e soluzioniCrea ed eseguiProgetto MSBuild crea l'output verbosità = Normale (o superiore al minimo ). Ciò aggiunge l'ora all'inizio / all'inizio della finestra di output. Ctrl+ Homenella finestra di output dovrebbe fare.

Se vogliamo vedere quanto tempo impiega ogni progetto, quindi Progetti e soluzioniImpostazioni progetto VC ++Tempi di costruzione = sì . È applicabile a tutti i progetti; "VC ++" è fuorviante.


1

Se vuoi invocare un programma esterno in grado di tenere traccia dei tuoi tempi di costruzione totali, puoi utilizzare la seguente soluzione per VS 2010 (e forse più vecchia). Il codice seguente utilizza CTime di Casey Muratori. Ovviamente puoi anche usarlo per stampare semplicemente i tempi di costruzione.

Apri Esplora macro e incolla prima quanto segue End Module:

Dim buildStart As Date
Private Sub RunCtime(ByVal StartRatherThanEnd As Boolean)
    Dim Arg As String
    Dim psi As New System.Diagnostics.ProcessStartInfo("ctime.exe")
    If StartRatherThanEnd Then
        psi.Arguments = "-begin"
    Else
        psi.Arguments = "-end"
    End If
    psi.Arguments += " c:\my\path\build.ctm"
    psi.RedirectStandardOutput = False
    psi.WindowStyle = ProcessWindowStyle.Hidden
    psi.UseShellExecute = False
    psi.CreateNoWindow = True
    Dim process As System.Diagnostics.Process
    process = System.Diagnostics.Process.Start(psi)
    Dim myOutput As System.IO.StreamReader = process.StandardOutput
    process.WaitForExit(2000)
    If process.HasExited Then
        Dim output As String = myOutput.ReadToEnd
        WriteToBuildWindow("CTime output: " + output)
    End If
End Sub

Private Sub BuildEvents_OnBuildBegin(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildBegin
    WriteToBuildWindow("Build started!")
    buildStart = Date.Now
    RunCtime(True)
End Sub

Private Sub BuildEvents_OnBuildDone(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildDone
    Dim buildTime = Date.Now - buildStart
    WriteToBuildWindow(String.Format("Total build time: {0} seconds", buildTime.ToString))
    RunCtime(False)
End Sub

Private Sub WriteToBuildWindow(ByVal message As String)
    Dim win As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
    Dim ow As OutputWindow = CType(win.Object, OutputWindow)
    If (Not message.EndsWith(vbCrLf)) Then
        message = message + vbCrLf
    End If
    ow.OutputWindowPanes.Item("Build").OutputString(message)
End Sub

Risposta presa da qui e qui .


1

Opzioni -> Progetti e soluzioni -> Impostazioni progetto VC ++ -> Build Timing

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.