Visualizzazione dei tempi di generazione in Visual Studio?
-
09-06-2019 - |
Domanda
Il nostro server di generazione sta prendendo troppo tempo per costruire uno dei nostri progetti in C++.Utilizza Visual Studio 2008.C'è un modo per ottenere devenv.com per registrare il tempo impiegato per la realizzazione di ogni progetto nella soluzione, in modo che io so dove concentrare i miei sforzi?
Migliorato l'hardware non è un'opzione, in questo caso.
Ho provato impostando l'uscita di verbosità (sotto Strumenti / Opzioni / Soluzioni e Progetti / Costruire ed Eseguire / MSBuild progetto di costruzione di uscita prolissità).Questo non sembra avere alcun effetto nell'IDE.
Durante l'esecuzione di MSBuild dalla riga di comando (e, per Visual Studio 2008, ha bisogno di essere MSBuild v3.5), si visualizza il tempo totale trascorso alla fine, ma non IDE.
Volevo una volta preso report per ogni progetto nella soluzione, in modo che io possa capire dove il processo di generazione stava prendendo il suo tempo.
In alternativa, dal momento che abbiamo effettivamente utilizzare NAnt per guidare il processo di generazione (usiamo Jetbrains TeamCity), c'è un modo per ottenere NAnt per dirmi che il tempo impiegato per ogni passo?
Soluzione
Menu Strumenti → Opzioni → Progetti e Soluzioni → VC++ Impostazioni del Progetto → Costruire Tempi dovrebbe funzionare.
Altri suggerimenti
Vai a Strumenti → Opzioni → Progetti e Soluzioni → compilare ed Eseguire → MSBuild progetto di costruzione di uscita livello di dettaglio - impostato su "Normale" o "Mappa", e il tempo di costruzione verrà visualizzato nella finestra di output.
Visual Studio 2012 fino al 2017
Per MSBuild Progetti (ad es.tutti .Net-Progetti):
Fare clic suTools -> Options
quindi selezionareProjects and Solutions -> Build and Run
.CambiareMSBuild project build output verbosity
perNormal
.Quindi verrà visualizzato il Tempo Trascorso in ogni Soluzione di Progetto si costruisce.Ma c'è unfortunatily senza Tempo Trascorso Somma su tutto il progetto.Si vedrà anche la Build iniziato TimestampPER C/C++ Progetto:
Fare clic su Tools -> Options
quindi selezionare Projects and Solutions -> VC++ Project Settings
.
Cambiare Build Timing
per Yes
.
Per Visual Studio 2012 si potrebbe utilizzare il Costruire Monitor estensione.
Se sei bloccato su VS2005 si potrebbe utilizzare il vs-costruire-timer plugin.Al termine di una build mostra il tempo totale impiegato e un (opzionale) riepilogo di ciascuna della durata del progetto.
Disclaimer;L'ho scritto.E sì, ho bisogno di creare un programma di installazione...un giorno!
Strumenti->Opzioni->Progetti e Soluzioni->Build and Run->
Impostare "MSBuild progetto di costruzione di uscita verbosità" da "Minimo" a "Normale"
Dal momento che la tua domanda implica l'utilizzo di DevEnv dalla riga di comando, mi permetto anche di suggerire l'utilizzo di MSBuild (che può costruire .sln file senza modifiche).
msbuild /fl /flp:Verbosity=diagnostic Your.sln
msbuild /?
mostra altre opzioni utili per la filelogger.
Se si desidera visualizzare il costruire è possibile utilizzare IncrediBuild.IncrediBuild oggi è disponibile anche nella versione autonoma di modalità (non distribuiti, ma solo per l'uso su 8 core sulla vostra macchina locale) per Visual Studio 2015 Update 1
Disclaimer:Io lavoro per IncrediBuild
Sono finito qui perché volevo solo la data e l'ora inclusi nella generazione di uscita.Dovrebbero essere altri a cercare qualcosa di simile è semplice come l'aggiunta di echo %date% %time%
per la Pre-compilazione e/o Post-generazione di eventi nell'ambito del progetto, Proprietà → Compilare → Costruire Eventi.
Fare una build prima e vedere che il progetto è apparso per la prima volta nella generazione di output (Ctrl + Casa nella finestra di output).Fare clic destro il progetto → Le Proprietà Del Progetto → Compilare → Costruire Eventi → Pre-build.E echo ###########%date% %time%#############
.
Così ogni volta che vedi build risultati (o durante la compilazione) fare Ctrl + Casa nella finestra di output.E da qualche parte in quella zona l'ora e la data fissa il tuo volto!
Oh, e si potrebbe finire l'aggiunta di questi dettagli, a molti progetti come l'ordine di generazione può cambiare :)
Ho trovato una soluzione migliore!###
Strumenti → Opzioni → Progetti & Soluzioni → Compilare ed Eseguire → MSBuild progetto di costruzione di uscita verbosità = Normale (o sopra Minimo).Questo aggiunge il tempo in principio superiore della finestra di uscita. Ctrl + Casa nella finestra di output deve fare.
Se vogliamo vedere quanto tempo i progetti hanno quindi Progetti & Soluzioni → VC++ Impostazioni del Progetto → Costruire Timing = sì.Esso è applicabile a tutti i progetti;"VC++" è fuorviante.
Se si desidera richiamare un programma esterno che permette di monitorare la vostra totale tempi di costruzione, è possibile utilizzare la seguente soluzione per VS 2010 (e forse più).Il codice riportato di seguito utilizza CTime da Casey Muratori.Naturalmente si può anche usare per stampare semplicemente il tempo di costruire.
Aprire esplora macro, e incollare il seguente 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
Ho creato un'estensione per misurare i tempi di costruzione e di presentare l'ordine degli eventi in un grafico: Visual Studio Build Timer.
È disponibile su visual studio, luogo di mercato e di opere per VS2015 e VS2017.
Trovo la presentazione visiva molto utile.Oltre a dimostrare che a fare progetti a lungo, essa mostra anche le dipendenze tra di loro, cioèprogetti che aspettare che gli altri per completare prima di iniziare.In questo modo è possibile individuare i colli di bottiglia nel costruire e vedere cosa dipendenze bisogno di rompere in modo da aumentare la parallelizzazione di compilazione.