it-swarm-ko.tech

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

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

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

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

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

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

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

164
Roger Lipscombe

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

186
JesperE

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

79
Dave Moore

2017 년까지 Visual Studio 2012

  • MSBuild 프로젝트의 경우 (예 : 모든 .Net-Projects) :
    Tools -> Options를 클릭 한 다음 Projects and Solutions -> Build and Run를 선택하십시오. MSBuild project build output verbosityNormal로 변경하십시오. 따라서 빌드 한 모든 솔루션 프로젝트에서 경과 시간이 표시됩니다. 그러나 모든 프로젝트에 대해 불행히도 경과 시간 합계는 없습니다. 또한 빌드가 시작된 타임 스탬프를 볼 수 있습니다

  • FOR C/C++ 프로젝트 :

Tools -> Options를 클릭 한 다음 Projects and Solutions -> VC++ Project Settings를 선택하십시오.

Build TimingYes로 변경하십시오.

31
Sebastian

Visual Studio 2012의 경우 Build Monitor 확장명을 사용할 수 있습니다.

9
Oliver

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

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

5
MattyT

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

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

5
RaaFFC

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

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

msbuild /?는 파일 로거에 대한 다른 유용한 옵션을 보여줍니다.

4
Dave Moore

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

면책 조항 : IncrediBuild에서 근무합니다

3
buildops

빌드 출력에 날짜와 시간을 포함시키기를 원했기 때문에 여기에서 끝났습니다. 다른 사람들이 비슷한 것을 찾고 있다면 echo %date% %time% 프로젝트의 사전 빌드 및/또는 사후 빌드 이벤트에 속성컴파일빌드 이벤트.

2
InbetweenWeekends

먼저 빌드를 수행하고 빌드 출력에서 ​​어떤 프로젝트가 먼저 나타나는지 확인하십시오 (Ctrl + Home 출력 창에서). 해당 프로젝트를 마우스 오른쪽 버튼으로 클릭 → 프로젝트 속성컴파일빌드 이벤트사전 빌드. 그리고 echo ###########%date% %time%#############.

따라서 빌드 결과를 볼 때마다 (또는 빌드 중에) Ctrl + Home 출력 창에서. 그리고 그 지역 어딘가에 시간과 날짜가 당신의 얼굴을 응시합니다!

아 그리고 빌드 순서가 변경 될 수 있기 때문에 많은 프로젝트에 이러한 세부 정보를 추가 할 수 있습니다. :)


더 나은 해결책을 찾았습니다! ###

도구옵션프로젝트 솔루션빌드 및 실행MSBuild 프로젝트 빌드 출력 상세도 = = 보통 (또는 최소 이상). 출력 창 시작/정지에 시간이 추가됩니다. Ctrl + Home 출력 창에서해야합니다.

각 프로젝트에 걸리는 시간을 보려면 프로젝트 솔루션VC++ 프로젝트 설정빌드 타이밍 = 예입니다. 모든 프로젝트에 적용 할 수 있습니다. "VC++"는 오해의 소지가 있습니다.

2
Blue Clouds

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

enter image description here

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

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

2
opetroch

총 빌드 시간을 추적 할 수있는 외부 프로그램을 호출하려면 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

herehere 에서 가져온 답변입니다.

1
Andreas Haferburg