Visual Studio에서 빌드 시간을 표시 하시겠습니까?


177

빌드 서버가 C ++ 프로젝트 중 하나를 빌드하는 데 너무 오래 걸렸습니다. Visual Studio 2008을 사용합니다. devenv.com이 솔루션에서 각 프로젝트를 빌드하는 데 걸리는 시간을 기록하여 내 노력을 집중할 수있는 위치를 알 수있는 방법이 있습니까?

이 경우 개선 된 하드웨어는 옵션이 아닙니다.

출력 세부 정보 설정을 시도했습니다 (도구 / 옵션 / 프로젝트 및 솔루션 / 빌드 및 실행 / MSBuild 프로젝트 빌드 출력 세부 정보). 이것은 IDE에 영향을 미치지 않는 것 같습니다.

명령 줄에서 MSBuild를 실행하면 (Visual Studio 2008의 경우 MSBuild v3.5 여야 함) IDE에서가 아니라 마지막에 경과 된 총 시간을 표시합니다.

솔루션의 각 프로젝트에 대해 시간이 많이 걸리는 보고서를 원했기 때문에 빌드 프로세스에서 시간이 걸리는 위치를 파악할 수있었습니다.

또는 실제로 NAnt를 사용하여 빌드 프로세스를 진행하기 때문에 (Jetbrains TeamCity 사용) NAnt가 각 단계에 소요되는 시간을 알려주는 방법이 있습니까?

답변:


205

메뉴 도구옵션프로젝트 및 솔루션VC ++ 프로젝트 설정빌드 타이밍 이 작동합니다.


78
"빌드 앤 런 (Run and Run)"아래에 있다고 생각할 수도 있지만, 간단합니다
토마스 보니 니 (Thomas Bonini)

6
그들이 그것을 거기에 두었다면, 다른 누군가는 그것이 그것이 예상되는 곳이 아니라고 불평했을 것입니다. 가장 명확한 위치는 사용자마다 다릅니다.
JesperE

4
이것의 결과는 무엇입니까?
Colonic Panic

4
@AndreasBonini는 아래 : 빌드 및 실행 당신은 찾을 수 의 MSBuild 프로젝트 빌드 출력 상세 당신이 위 설정할 수 있습니다 최소한 도 타이밍을 얻을 수 있습니다.
Joey

4
이는 빌드 단계 내에서 개별 작업을 프로파일 링하는 데 좋지만 전체 빌드를 요약하지는 않습니다.
페르난도 곤잘레스 산체스

88

도구 → 옵션 → 프로젝트 및 솔루션 → 빌드 및 실행 → MSBuild 프로젝트 빌드 출력 상세- "정상"또는 "상세"로 설정하면 빌드 시간이 출력 창에 나타납니다.


2
Visual Studio 2010 이전에는 Visual C ++ 프로젝트가 MSBuild를 사용하지 않으므로이 설정은 적용되지 않습니다. 그러나 다른 프로젝트 유형에 적합합니다.
Roger Lipscombe

23
"Detailed"대신 "Normal"로 설정하면 충분합니다. :)
andrecarlucci

7
VC ++ 프로젝트 설정-> 빌드 타이밍이 너무 많은 세부 사항을 보여주기 때문에 이것을 보통으로 설정하는 것이 실제로 가장 원하는 것입니다.
Ghita

1
ClCompile이 프로젝트 중 하나에서 22424ms를 차지한 것이 아니라 총 시간이 대부분의 사람들이 원하는 것입니다. Ctrl + Q를 누르고 <Enter>를 빌드하고 실행 한 다음 먼저 "최소"를 "정상"으로 변경하십시오.
Tomasz Gandor

36

Visual Studio 2012-2019

  • MSBuild 프로젝트 (예 : 모든 .Net-Project)의 경우 :을
    클릭 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 ++ 포함)에 대해 표시됩니다.
Farway


6

VS2005에 갇혀 있다면 vs-build-timer 플러그인을 사용할 수 있습니다 . 빌드가 완료되면 소요 된 총 시간과 각 프로젝트 기간에 대한 (선택 사항) 요약이 표시됩니다.

부인 성명; 내가 썼어. 그리고 네, 언젠가 인스톨러를 만들어야합니다!


설치 프로그램을 사용할 수 있습니까?
Martin

6

도구-> 옵션-> 프로젝트 및 솔루션-> 빌드 및 실행->

"MSBuild 프로젝트 빌드 출력 상세도"를 "최소"에서 "정상"으로 설정


4

빌드를 시각화하려면 IncrediBuild를 사용할 수 있습니다. IncrediBuild는 이제 Visual Studio 2015 업데이트 1의 일부로 독립형 모드 (분산되지 않고 로컬 컴퓨터의 8 개 코어에서만 사용)로 제공됩니다.

면책 조항 : IncrediBuild에서 일합니다.


4

귀하의 질문은 명령 줄에서 DevEnv를 사용하는 것과 관련이 있기 때문에 MSBuild (수정없이 .sln 파일을 빌드 할 수 있음)를 사용하는 것이 좋습니다 .

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

msbuild /? 파일 로거에 대한 다른 유용한 옵션이 표시됩니다.


4

빌드 시간을 측정하고 그래프에서 이벤트 순서를 나타내는 확장 기능을 만들었습니다. Visual Studio Build Timer .

여기에 이미지 설명을 입력하십시오

Visual Studio 마켓 플레이스에서 사용할 수 있으며 VS2015, VS2017 및 VS2019에서 작동합니다.

시각적 프레젠테이션이 매우 유용합니다. 어떤 프로젝트가 더 오래 걸리는지를 보여주는 것 외에도, 다른 프로젝트가 시작되기 전에 다른 프로젝트가 완료되기를 기다리는 프로젝트 간의 종속성도 보여줍니다. 이 방법으로 빌드에서 병목 현상을 발견하고 빌드의 병렬화를 높이기 위해 어떤 종속성이 깨져야하는지 확인할 수 있습니다.


3
VS 2019
Konstantin Chernov

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.