web-dev-qa-db-fra.com

Afficher les temps de construction dans Visual Studio?

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. Y at-il un moyen d’obtenir 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?

Un matériel amélioré 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 de génération de projet MSBuild). 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 déterminer où le processus de construction prenait son temps.

Alternativement, 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?

155
Roger Lipscombe

Menu Outils Options Projets et solutions Paramètres de projet VC++ Build Timing devrait fonctionner.

177
JesperE

Sélectionnez Outils → Options → Projets et solutions → Construire et exécuter → Verbosité de sortie du projet MSBuild - définissez sur «Normal» ou «Détaillé». Le temps de construction apparaît dans la fenêtre de sortie.

73
Dave Moore

Visual Studio 2012 à 2017

  • Pour les projets MSBuild (par exemple, tous les projets .Net):
    Cliquez sur Tools -> Options puis sélectionnez Projects and Solutions -> Build and Run. Remplacez MSBuild project build output verbosity par Normal. Ainsi, il affichera le temps écoulé dans chaque projet de solution qu'il construit. Mais il n’ya malheureusement pas de somme de temps écoulé pour tous les projets. Vous verrez également l'horodatage de la construction démarrée

  • Pour le projet C/C++:  

Cliquez sur Tools -> Options puis sélectionnez Projects and Solutions -> VC++ Project Settings.

Remplacez Build Timing par Yes.

27
Sebastian

Pour Visual Studio 2012, vous pouvez utiliser l'extension Build Monitor .

9
Oliver

Si vous êtes bloqué sur VS2005, vous pouvez utiliser le plugin vs-build-timer . À la fin de la construction, il affiche le temps total nécessaire et un résumé (facultatif) de chaque durée du projet.

Avertissement; Je l'ai écrit. Et oui, je dois créer un installateur ... un jour!

5
MattyT

Outils-> Options-> Projets et solutions-> Build and Run->

Définissez "Verbosité de sortie du projet MSBuild" de "Minimal" à "Normal"

5
RaaFFC

Puisque votre question implique l'utilisation de DevEnv à partir de la ligne de commande, je suggérerais également d'utiliser MSBuild (qui peut créer des fichiers .sln sans modification). 

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

msbuild /? vous montrera d'autres options utiles pour le gestionnaire de fichiers.

4
Dave Moore

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

3
buildops

Je me suis retrouvé ici parce que je voulais juste 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 du projet, Propriétés Compiler Construire des événements .

2
InbetweenWeekends

Faites d'abord une construction et voyez quel projet apparaît en premier dans la sortie de la construction (Ctrl + Home dans la fenêtre de sortie). Faites un clic droit sur ce projet → Propriétés du projetCompilerÉvénements de constructionPré-construction. Et echo ###########%date% %time%#############.

Ainsi, chaque fois que vous voyez des résultats de construction (ou pendant la construction), Ctrl + Home dans la fenêtre de sortie. Et quelque part dans cette zone, l'heure et la date fixent votre visage!

Oh, et vous pourriez ajouter ces détails à de nombreux projets, car l'ordre de construction peut changer :)


J'ai trouvé une meilleure solution! ###

OutilsOptionsProjets et solutionsConstruire et exécuterVerbosité de sortie du projet MSBuild = Normal (ou supérieur Minimal). Cela ajoute l'heure au début/au début de la fenêtre de sortie. Ctrl + Home dans la fenêtre de sortie devrait faire.

Si nous voulons voir combien de temps prend chaque projet, alors Projets et solutionsParamètres de projet VC++Build Timing = yes. Il est applicable à tous les projets. "VC++" est trompeur.

2
Blue Clouds

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 macro 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

Réponse prise de ici et ici .

1

Options -> Projets et solutions -> Paramètres de projet VC++ -> Timing de construction

 enter image description here

0
Wesam

J'ai créé une extension pour mesurer les temps de construction et présenter l'ordre des événements dans un graphique: Visual Studio Build Timer .

 enter image description here

Il est disponible sur la place du 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 durent plus longtemps, 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'augmenter la parallélisation de votre construction.

0
opetroch