Visual Studioでビルド時間を表示しますか?


177

ビルドサーバーがC ++プロジェクトの1つをビルドするのに時間がかかりすぎています。Visual Studio 2008を使用しています。devenv.comにソリューションの各プロジェクトのビルドにかかった時間を記録させて、どこに重点を置くかを知る方法はありますか?

この場合、改善されたハードウェアはオプションではありません。

出力の詳細度を設定しようとしました(ツール/オプション/プロジェクトとソリューション/ビルドと実行/ MSBuildプロジェクトビルドの出力の詳細度)。これはIDEでは効果がないようです。

コマンドラインからMSBuildを実行している場合(Visual Studio 2008の場合はMSBuild v3.5である必要があります)、IDEではなく、最後に経過した合計時間が表示されます。

ソリューションのプロジェクトごとに時間のかかるレポートが本当に欲しかったので、ビルドプロセスに時間がかかっている場所を特定できました。

あるいは、実際にNAntを使用してビルドプロセスを駆動しているため(Jetbrains TeamCityを使用)、NAntに各ステップの所要時間を通知する方法はありますか?

回答:


205

メニューツールオプションプロジェクトとソリューションVC ++プロジェクト設定ビルドタイミングが機能するはずです。


78
「ビルドアンドラン」の下にあると思うかもしれませんが、それは単純なことだったでしょう
トーマスボニーニ

6
もし彼らがそれをそこに置いていたら、誰かがそれが彼らがそれを期待するところではないことを不平を言うだろう。それを置く最も明白な場所は、ユーザーによって異なります。
JesperE 2010

4
これの出力は何ですか?
大佐パニック

4
@AndreasBonini:下にビルドして実行あなたが見つけるのMSBuildプロジェクトのビルド出力の冗長あなたが上に設定できる最小あまりにも、タイミングを取得することを。
ジョーイ

4
これは、ビルドステージ内の個々のタスクのプロファイリングに適していますが、ビルド全体の概要は提供しません。
フェルナンドゴンザレスサンチェス

88

[ツール]→[オプション]→[プロジェクトとソリューション]→[ビルドと実行]→[MSBuildプロジェクトビルド出力の詳細度]に移動します。 "通常"または "詳細"に設定すると、ビルド時間が出力ウィンドウに表示されます。


2
Visual Studio 2010より前は、Visual C ++プロジェクトはMSBuildを使用しないため、この設定は効果がありません。ただし、他の種類のプロジェクトでは問題なく機能します。
Roger Lipscombe

23
"Detailed"ではなく "Normal"に設定するだけで十分です:)
andrecarlucci

7
これを通常に設定することは、VC ++プロジェクト設定->ビルドタイミングがあまりにも多くの詳細を表示するため、実際に最も望まれることです
Ghita

1
これは正確にほとんどの人が望んでいることです-合計時間であり、ClCompileがプロジェクトの1つで22424msかかったわけではありません。Ctrl + Q、ビルドして<Enter>を実行し、最初の「最小」を「通常」に変更します。
Tomasz Gandor 2016年

36

Visual Studio 2012-2019

  • MSBuildプロジェクト(すべての.Netプロジェクトなど)の場合:を
    クリックしてTools -> Optionsからを選択しますProjects and Solutions -> Build and Run。に変更MSBuild project build output verbosityNormalます。したがって、ビルドするすべてのソリューションプロジェクトで経過時間を表示します。しかし、残念ながら、すべてのプロジェクトで経過時間の合計はありません。ビルド開始のタイムスタンプも表示されます

  • C / C ++プロジェクトの場合:

をクリックしてTools -> Options、を選択しますProjects and Solutions -> VC++ Project Settings

に変更Build TimingYesます。


4
あなたが提供したソリューションは、VS 2015でC ++プロジェクトに対しても機能します。また、Build Timing合計時間のみを表示するため、このソリューションを使用する代わりにこのソリューションを選択します。
またはB

1
VS2019では変更なし。すべてのMSBuildプロジェクト(C / C ++を含む)の合計「経過時間」が表示されます。
ファーウェイ


6

VS2005で立ち往生している場合は、vs-build-timerプラグインを使用できます。ビルドが完了すると、所要時間の合計と各プロジェクト期間の(オプション)サマリーが表示されます。

免責事項; 私はそれを書きました。そしてはい、私はインストーラーを作成する必要があります...ある日!


インストーラーは利用可能ですか
Martin

6

ツール->オプション->プロジェクトとソリューション->ビルドと実行->

「MSBuildプロジェクトビルド出力の詳細度」を「最小」から「標準」に設定します


4

ビルドを視覚化したい場合は、IncrediBuildを使用できます。IncrediBuildは、Visual Studio 2015 Update 1の一部として無料でスタンドアロンモード(配布されていませんが、ローカルマシンの8コアでのみ使用)で利用できます。

免責事項:私はIncrediBuildで働いています


4

コマンドラインからDevEnvを使用することに関する質問なので、MSBuild(変更せずに.slnファイルをビルドできる)を使用することもお勧めします。

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

msbuild /? ファイルロガーの他の便利なオプションが表示されます。


4

ビルド時間を測定し、イベントの順序をグラフに表示する拡張機能であるVisual Studio Build Timerを作成しました

ここに画像の説明を入力してください

ビジュアルスタジオマーケットプレイスで入手でき、VS2015、VS2017、VS2019で動作します。

視覚的なプレゼンテーションは非常に役立ちます。どのプロジェクトに時間がかかるかを示すだけでなく、プロジェクト間の依存関係、つまり、開始する前に他のプロジェクトが完了するのを待つプロジェクトも示します。このようにして、ビルドのボトルネックを特定し、ビルドの並列化を向上させるためにどの依存関係を解消する必要があるかを確認できます。


3
VS 2019をサポートするようにアップグレードしていただけませんか
Konstantin Chernov '27

3
最近はちょっと忙しいですが、計画中です。
opetroch

2

ビルドの出力に日付と時刻を含めたいだけだったので、ここに行きました。他の人が同様の何かを探している場合はecho %date% %time%、プロジェクトの下のビルド前イベントまたはビルド後イベント、あるいはその両方にプロパティコンパイルビルドイベントを追加するのと同じくらい簡単です。


2

最初にビルドを行い、ビルド出力に最初に表示されるプロジェクトを確認します(出力ウィンドウのCtrl+ Home)。右→そのプロジェクト]をクリックし、プロジェクトプロパティコンパイルビルドイベントプリビルドを。そしてecho ###########%date% %time%#############

したがって、ビルド結果が表示されるたびに(またはビルド中に)、出力ウィンドウでCtrl+ Homeを実行します。そして、そのエリアのどこかで、時間と日付があなたの顔を見つめます!

ビルドの順序が変わる可能性があるため、これらの詳細を多くのプロジェクトに追加することになるかもしれません:)


私はより良い解決策を見つけました!###

ツールオプションプロジェクトとソリューションビルドと実行MSBuildプロジェクトのビルド出力の詳細度 =標準(または最小以上)。これにより、出力ウィンドウの先頭/上部に時間が追加されます。Ctrl+ Home出力ウィンドウで行う必要があります。

私たちは、それぞれのプロジェクトが、その後取るどのくらいの時間を確認したい場合はプロジェクトおよびソリューションVC ++プロジェクト設定ビルドのタイミングを=はい。すべてのプロジェクトに適用できます。「VC ++」は誤解を招くものです。


1

総ビルド時間を追跡できる外部プログラムを呼び出す場合は、VS 2010(およびおそらくそれより古い)の次のソリューションを使用できます。以下のコードは、Casey MuratoriによるCTimeを使用しています。もちろん、ビルド時間を出力するだけでも使用できます。

マクロエクスプローラーを開き、次のものを前に貼り付けます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

ここここからの回答。


1

オプション->プロジェクトとソリューション-> VC ++プロジェクト設定->ビルドタイミング

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.