189

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

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

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

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

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

または、実際にはNAntを使用してビルドプロセスを実行しているため(Jetbrains TeamCityを使用)、NAntに各ステップにかかる時間を教えてもらう方法はありますか?

4

13 に答える 13

217

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

于 2008-09-25T10:34:16.823 に答える
101

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

于 2008-09-17T11:22:16.720 に答える
9

Visual Studio 2012 では、 Build Monitor拡張機能を使用できます。

于 2013-07-08T12:16:57.033 に答える
7

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

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

于 2013-01-16T12:14:36.550 に答える
6

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

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

于 2010-04-07T04:29:02.460 に答える
5

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

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

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

于 2008-09-17T11:36:27.950 に答える
5

ビルドを視覚化する場合は、IncrediBuild を使用できます。Visual Studio 2015 Update 1 の一部として、IncrediBuild がスタンドアロン モード (分散ではなく、ローカル マシンの 8 コアでのみ使用) で無料で利用できるようになりました。

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

于 2015-12-06T14:38:34.477 に答える
4

ビルド出力に日付と時刻を含めたいだけだったので、ここにたどり着きました。他の人が同様のものを探している場合はecho %date% %time%、プロジェクトの下のビルド前および/またはビルド後のイベントに追加するのと同じくらい簡単です、PropertiesCompileBuild Events

于 2015-03-19T14:02:18.993 に答える
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

hereおよびhereから取得した回答。

于 2016-05-10T12:49:12.950 に答える
1

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

ここに画像の説明を入力

于 2018-07-03T10:39:34.323 に答える