it-swarm.it

Visualizzazione dei tempi di compilazione in Visual Studio?

Il nostro server di build impiega troppo tempo per creare uno dei nostri progetti C++. Utilizza Visual Studio 2008. C'è un modo per far sì che devenv.com registri il tempo impiegato per costruire 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à di output (sotto Strumenti/Opzioni/Progetti e soluzioni/Build ed Esegui/verbosità di output del progetto build di MSBuild). Questo non sembra avere alcun effetto nell'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.

Desideravo davvero una relazione cronologica per ciascun progetto nella soluzione, in modo da poter capire dove il processo di costruzione stava prendendo il suo tempo.

In alternativa, dato che effettivamente usiamo NAnt per guidare il processo di compilazione (usiamo Jetbrains TeamCity), c'è un modo per far sì che NAnt mi dica il tempo impiegato per ogni passaggio?

155
Roger Lipscombe

Menu Strumenti Opzioni Progetti e soluzioni Impostazioni progetto VC++ Tempo di costruzione dovrebbe funzionare.

177
JesperE

Vai a Strumenti → Opzioni → Progetti e soluzioni → Crea ed esegui → Verbosità di output del progetto MSBuild - imposta su "Normale" o "Dettagliato" e il tempo di compilazione apparirà nella finestra di output.

73
Dave Moore

Visual Studio 2012 fino al 2017

  • Per i progetti MSBuild (ad esempio tutti i progetti .Net):
    Fare clic su Tools -> Options e quindi selezionare Projects and Solutions -> Build and Run. Modificare MSBuild project build output verbosity in Normal. Quindi mostrerà il tempo trascorso in ogni progetto di soluzione che costruisce. Ma sfortunatamente non c'è una somma di tempo trascorso su tutto il progetto. Verrà inoltre visualizzato il timestamp di avvio

  • PER Progetto C/C++:  

Fare clic su Tools -> Options e quindi selezionare Projects and Solutions -> VC++ Project Settings.

Cambia Build Timing in Yes.

27
Sebastian

Per Visual Studio 2012 è possibile utilizzare Build Monitor extension.

9
Oliver

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 (opzionale) di ciascuna durata del progetto.

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

5
MattyT

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

Imposta "verbosità dell'output di generazione del progetto MSBuild" da "Minima" a "Normale"

5
RaaFFC

Dal momento che la tua domanda riguarda l'utilizzo di DevEnv dalla riga di comando, ti suggerirei di usare MSBuild (che può creare file .sln senza modifiche). 

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

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

4
Dave Moore

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

3
buildops

Sono finito qui perché volevo solo la data e l'ora incluse nell'output della build. Se gli altri sono alla ricerca di qualcosa di simile è semplice come aggiungere echo %date% %time% agli eventi Pre-build e/o Post-build sotto progetto, Properties Compile Build Events .

2

Effettua prima una build e vedi quale progetto appare per primo nell'output della build (Ctrl + Home nella finestra di output). Fai clic con il tasto destro del mouse su quel progetto → Proprietà del progettoCompilaCrea eventiPre-build. E echo ###########%date% %time%#############.

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

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


Ho trovato una soluzione migliore! ###

StrumentiOpzioniProgetti e soluzioniCostruisci ed eseguiverbosità dell'output di generazione del progetto MSBuild = Normale (o superiore Minimo). Questo aggiunge il tempo all'inizio/all'inizio della finestra di output. Ctrl + Home nella finestra di output dovrebbe fare.

Se vogliamo vedere quanto tempo impiegano ciascun progetto Projects & SolutionsImpostazioni progetto VC++Build Timing = yes. È applicabile a tutti i progetti; "VC++" è fuorviante.

2
Blue Clouds

Se si desidera richiamare un programma esterno in grado di tracciare i tempi di compilazione totali, è possibile utilizzare la seguente soluzione per VS 2010 (e forse precedente). Il codice seguente utilizza CTime di Casey Muratori. Ovviamente puoi anche usarlo per stampare semplicemente i tempi di costruzione.

Apri la macro Explorer e incolla quanto segue prima di 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 tratta da qui e qui .

1

Opzioni -> Progetti e soluzioni -> Impostazioni progetto VC++ -> Tempo di costruzione

 enter image description here

0
Wesam

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

 enter image description here

È disponibile sul mercato degli studi visivi e funziona per VS2015 e VS2017.

Trovo la presentazione visiva abbastanza utile. Oltre a mostrare quali progetti impiegano più tempo, mostra anche le dipendenze tra di loro, ovvero i progetti che attendono che gli altri si completino prima di iniziare. In questo modo puoi individuare i colli di bottiglia nella build e vedere quali dipendenze devono essere interrotte per aumentare la parallelizzazione della tua build.

0
opetroch