Afficher les temps de construction dans Visual Studio?
-
09-06-2019 - |
Question
Notre serveur de génération prend trop de temps pour générer l'un de nos projets C ++. Il utilise Visual Studio 2008. Existe-t-il un moyen quelconque pour que devenv.com enregistre le temps nécessaire à la génération de chaque projet dans la solution, afin que je sache où concentrer mes efforts?
L'amélioration du matériel informatique n'est pas une option dans ce cas.
J'ai essayé de définir la verbosité de sortie (sous Outils / Options / Projets et Solutions / Construire et exécuter / Projet MSBuild, générer la verbosité de sortie). Cela ne semble pas avoir d'effet dans l'EDI.
Lorsque vous exécutez MSBuild à partir de la ligne de commande (et que, pour Visual Studio 2008, il doit s'agir de MSBuild v3.5), il affiche le temps total écoulé à la fin, mais pas dans l'EDI.
Je voulais vraiment un rapport chronologique pour chaque projet de la solution, afin de pouvoir savoir où le processus de construction prenait son temps.
Sinon, puisque nous utilisons réellement NAnt pour piloter le processus de construction (nous utilisons Jetbrains TeamCity), existe-t-il un moyen de demander à NAnt de me dire le temps pris pour chaque étape?
La solution
Outils ? Options ? Projets et solutions ? Paramètres de projet VC ++ ? Timing de construction devrait fonctionner.
Autres conseils
Accédez à Outils & # 8594; Options & # 8594; Projets et solutions & # 8594; Construire et exécuter & # 8594; Verbosité de sortie du projet MSBuild - définie sur "Normal" ou "Détaillé" et l'heure de construction apparaîtra dans la fenêtre de sortie.
Visual Studio 2012 jusqu'en 2017
-
Pour les projets MSBuild (par exemple, tous les projets .Net):
Cliquez surOutils - > Options
, puis sélectionnezProjets et solutions - > Construire et exécuter
. Modifiezla verbosité de sortie du projet de construction du projet MSBuild
enNormal
. Donc, il affichera le temps écoulé dans chaque projet de solution qu'il construit. Mais il n’existe malheureusement aucune somme de temps écoulé sur l’ensemble des projets. Vous verrez également l'horodatage de la construction démarrée -
Projet FOR C / C ++:
Cliquez sur Outils - > Options
, puis sélectionnez Projets et solutions - > Paramètres de projet VC ++
.
Remplacez le calendrier de construction
par Oui
.
Pour Visual Studio 2012, vous pouvez utiliser le Build Monitor . extension.
Si vous êtes bloqué sur VS2005, vous pouvez utiliser le plug-in vs-build-timer. . À la fin de la construction, il affiche le temps total nécessaire et un résumé (facultatif) de chacune des durées du projet.
Avertissement Je l'ai écrit. Et oui, je dois créer un installateur ... un jour!
Outils- > Options- > Projets et solutions- > Construire et exécuter- >
Définir & verb; la sortie du projet de construction du projet MSBuild " de " Minimal " vers "Normal"
Étant donné que votre question implique l'utilisation de DevEnv à partir de la ligne de commande, je vous suggère également d'utiliser MSBuild . (qui peut construire des fichiers .sln sans modification).
msbuild /fl /flp:Verbosity=diagnostic Your.sln
msbuild /?
vous montrera d'autres options utiles pour le gestionnaire de fichiers.
Si vous souhaitez visualiser votre version, vous pouvez utiliser IncrediBuild. IncrediBuild est maintenant disponible en mode autonome (non distribué mais uniquement sur 8 cœurs de votre ordinateur local) gratuitement dans le cadre de Visual Studio 2015 Update 1
Avertissement: je travaille pour IncrediBuild
Je me suis retrouvé ici parce que je voulais simplement que la date et l'heure soient incluses dans la sortie du build. Si d’autres recherchent quelque chose de similaire, il suffit d’ajouter echo% date%% time%
aux événements de pré-génération et / ou de post-génération sous projet, Propriétés et # 8594; Compiler & # 8594; Événements de construction .
Faites d'abord une construction et voyez quel projet apparaît en premier dans la sortie de la construction ( Ctrl + Accueil dans la fenêtre de sortie). Cliquez avec le bouton droit sur ce projet & # 8594; Propriétés du projet & # 8594; Compiler & # 8594; Construire des événements & # 8594; Pré-génération . Et echo ############% date%% heure% #############
.
Ainsi, chaque fois que vous voyez des résultats de construction (ou pendant la construction), faites Ctrl + Accueil dans la fenêtre de sortie. Et quelque part dans cette zone, l'heure et la date vous fixent le visage!
Oh, vous risquez peut-être d'ajouter ces détails à de nombreux projets, car l'ordre de construction peut changer:)
J'ai trouvé une meilleure solution! ###
Outils & # 8594; Options & # 8594; Projets & amp; Solutions & # 8594; Construire et exécuter & # 8594; Verbosité de sortie du build de projet MSBuild = Normal (ou supérieur à Minimal ). Cela ajoute l'heure au début / au début de la fenêtre de sortie. Ctrl + Accueil dans la fenêtre de sortie devrait faire l'affaire.
Si nous voulons voir combien de temps chaque projet prend, alors Projets & amp; Solutions & # 8594; Paramètres de projet VC ++ & # 8594; Build Timing = yes . Il est applicable à tous les projets. "VC ++" est trompeur.
Si vous souhaitez appeler un programme externe capable de suivre vos temps de construction totaux, vous pouvez utiliser la solution suivante pour VS 2010 (et peut-être plus ancienne). Le code ci-dessous utilise CTime de Casey Muratori. Bien sûr, vous pouvez également l'utiliser pour simplement imprimer le temps de construction.
Ouvrez l'explorateur de macros et collez les éléments suivants avant 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
J'ai créé une extension pour mesurer les temps de construction et présenter l'ordre des événements dans un graphique: Minuteur de compilation Visual Studio .
Il est disponible sur le marché des studios visuels et fonctionne pour VS2015 et VS2017.
Je trouve la présentation visuelle très utile. En plus de montrer quels projets prennent plus de temps, il montre également les dépendances entre eux, c’est-à-dire les projets qui attendent que les autres se terminent avant de commencer. De cette façon, vous pouvez repérer les goulots d'étranglement dans la construction et voir quelles dépendances doivent être rompues afin d'accroître la parallélisation de votre construction.