Hiển thị thời gian xây dựng trong Visual Studio?


177

Máy chủ xây dựng của chúng tôi đang mất quá nhiều thời gian để xây dựng một trong các dự án C ++ của chúng tôi. Nó sử dụng Visual Studio 2008. Có cách nào để devenv.com ghi lại thời gian cần thiết để xây dựng từng dự án trong giải pháp, để tôi biết nơi tập trung nỗ lực của mình không?

Cải thiện phần cứng không phải là một lựa chọn trong trường hợp này.

Tôi đã thử thiết lập mức độ dài của đầu ra (bên dưới Công cụ / Tùy chọn / Dự án và Giải pháp / Xây dựng và Chạy / Độ dài đầu ra của dự án xây dựng dự án MSBuild). Điều này dường như không có bất kỳ ảnh hưởng nào trong IDE.

Khi chạy MSBuild từ dòng lệnh (và, đối với Visual Studio 2008, nó cần phải là MSBuild v3.5), nó sẽ hiển thị tổng thời gian đã trôi qua ở cuối, nhưng không phải trong IDE.

Tôi thực sự muốn có một báo cáo mất thời gian cho từng dự án trong giải pháp, để tôi có thể tìm ra nơi quá trình xây dựng đang mất thời gian.

Ngoài ra, vì chúng tôi thực sự sử dụng NAnt để thúc đẩy quá trình xây dựng (chúng tôi sử dụng Jetbrains TeamCity), có cách nào để NAnt cho tôi biết thời gian dành cho mỗi bước không?

Câu trả lời:


205

Công cụ menu → Tùy chọnDự án và Giải phápCài đặt dự án VC ++Xây dựng thời gian sẽ hoạt động.


78
Mọi người sẽ nghĩ nó nằm dưới "Xây dựng và chạy", nhưng không, điều đó sẽ đơn giản
Thomas Bonini

6
Nếu họ đã đặt nó ở đó, một người khác sẽ phàn nàn rằng đó không phải là nơi họ mong đợi. Nơi rõ ràng nhất để đặt nó là khác nhau cho người dùng khác nhau.
JesperE

4
Đầu ra của cái này là gì?
Đại tá hoảng loạn

4
@AndreasBonini: Trong Build and Run, bạn sẽ tìm thấy v̱erbosity đầu ra của dự án MSBuild mà bạn có thể đặt ở trên Minimal để nhận thời gian.
Joey

4
Điều này tốt cho việc định hình các tác vụ riêng lẻ trong một giai đoạn xây dựng, nhưng không đưa ra tóm tắt của toàn bộ bản dựng.
Fernando Gonzalez Sanchez

88

Chuyển đến Công cụ → Tùy chọn → Dự án và Giải pháp → Xây dựng và Chạy → Độ dài đầu ra của dự án xây dựng dự án MSBuild - được đặt thành "Bình thường" hoặc "Chi tiết" và thời gian xây dựng sẽ xuất hiện trong cửa sổ đầu ra.


2
Trước Visual Studio 2010, các dự án Visual C ++ không sử dụng MSBuild, vì vậy cài đặt này không có hiệu lực. Hoạt động tốt cho các loại dự án khác, mặc dù.
Roger Lipscombe

23
đặt thành "Bình thường" thay vì "Chi tiết" là đủ :)
andrecarlucci

7
Đặt cài đặt này thành Bình thường thực sự là điều mong muốn nhất vì Cài đặt dự án VC ++ -> Xây dựng thời gian hiển thị quá nhiều chi tiết
Ghita

1
Đây chính xác là những gì hầu hết mọi người muốn - tổng thời gian, và không phải ClCompile mất 22424ms trong một trong các dự án. Ctrl + Q, xây dựng và chạy <Enter> và thay đổi "tối thiểu" đầu tiên thành "bình thường".
Tomasz Gandor

36

Visual Studio 2012 - 2019

  • Đối với Dự án MSBuild (ví dụ: tất cả .Net-Project):
    Nhấp Tools -> Optionsvà sau đó chọn Projects and Solutions -> Build and Run. Thay đổi MSBuild project build output verbositythành Normal. Vì vậy, nó sẽ hiển thị Thời gian đã trôi qua trong mọi Dự án Giải pháp mà nó xây dựng. Nhưng thật không may là không có Sum Time Time trôi qua trên tất cả các dự án. Bạn cũng sẽ thấy Dấu thời gian bắt đầu bản dựng

  • Dự án C / C ++:

Nhấn Tools -> Optionsvà sau đó chọn Projects and Solutions -> VC++ Project Settings.

Thay đổi Build Timingthành Yes.


4
Giải pháp bạn cung cấp cho tôi trên VS 2015 cho một dự án C ++. Ngoài ra, tôi chọn sử dụng giải pháp này thay Build Timingvì chỉ hiển thị tổng thời gian.
Hoặc B

1
Không thay đổi với VS2019. Tổng "thời gian đã trôi qua" được hiển thị cho tất cả các Dự án MSBuild (bao gồm cả C / C ++).
Farway

9

Đối với Visual Studio 2012, bạn có thể sử dụng tiện ích mở rộng Build Monitor .


1
Bạn cũng có thể sử dụng nó cho Visual Studio 2013 và 2015.
Shad

6

Nếu bạn bị kẹt trên VS2005, bạn có thể sử dụng plugin vs-build-timer . Khi hoàn thành một bản dựng, nó hiển thị tổng thời gian thực hiện và một bản tóm tắt (tùy chọn) của từng thời lượng dự án.

Tuyên bố miễn trừ trách nhiệm; Tôi đã viết nó. Và vâng, tôi cần tạo một trình cài đặt ... một ngày nào đó!


Trình cài đặt của bạn có sẵn không
Martin

6

Công cụ-> Tùy chọn-> Dự án và Giải pháp-> Xây dựng và Chạy->

Đặt "Độ dài đầu ra của dự án xây dựng dự án MSBuild" từ "Tối thiểu" thành "Bình thường"


4

Nếu bạn muốn trực quan hóa bản dựng của mình, bạn có thể sử dụng IncrediBuild. IncrediBuild hiện có sẵn ở chế độ độc lập (không được phân phối nhưng chỉ được sử dụng trên 8 lõi trên máy cục bộ của bạn) như một phần của Visual Studio 2015 Update 1

Tuyên bố miễn trừ trách nhiệm: Tôi làm việc cho IncrediBuild


4

Vì câu hỏi của bạn liên quan đến việc sử dụng DevEnv từ dòng lệnh, tôi cũng sẽ đề xuất sử dụng MSBuild (có thể xây dựng các tệp .sln mà không cần sửa đổi).

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

msbuild /? sẽ cho bạn thấy các tùy chọn hữu ích khác cho filelogger.


4

Tôi đã tạo một tiện ích mở rộng để đo thời gian xây dựng và trình bày thứ tự các sự kiện trong biểu đồ: Visual Studio Build Timer .

nhập mô tả hình ảnh ở đây

Nó có sẵn trên thị trường phòng thu trực quan và hoạt động cho VS2015, VS2017 và VS2019.

Tôi thấy trình bày trực quan khá hữu ích. Ngoài việc hiển thị dự án nào mất nhiều thời gian hơn, nó còn cho thấy sự phụ thuộc giữa chúng, tức là các dự án chờ người khác hoàn thành trước khi chúng bắt đầu. Bằng cách này, bạn có thể phát hiện các nút thắt cổ chai trong bản dựng và xem những phụ thuộc nào cần phá vỡ để tăng tính song song của bản dựng.


3
Bạn có thể vui lòng nâng cấp nó để hỗ trợ VS 2019
Konstantin Chernov

3
Tôi có một chút bận rộn những ngày này, nhưng đó là trong kế hoạch của tôi.
opetroch

2

Tôi đã kết thúc ở đây vì tôi chỉ muốn ngày và thời gian được bao gồm trong đầu ra bản dựng. Nếu những người khác đang tìm kiếm thứ gì đó tương tự thì đơn giản như thêm echo %date% %time%vào các sự kiện Pre-build và / hoặc Post-build trong dự án, Thuộc tínhBiên dịchXây dựng sự kiện .


2

Thực hiện xây dựng trước và xem dự án nào xuất hiện đầu tiên trong đầu ra xây dựng ( Ctrl+ Hometrong cửa sổ đầu ra). Nhấp chuột phải vào dự án đó → Thuộc tính dự ánBiên dịchXây dựng sự kiệnXây dựng trước . Và echo ###########%date% %time%#############.

Vì vậy, mỗi khi bạn thấy kết quả bản dựng (hoặc trong quá trình xây dựng) hãy làm Ctrl+ Hometrong cửa sổ đầu ra. Và một nơi nào đó trong khu vực đó thời gian và ngày nhìn chằm chằm vào khuôn mặt của bạn!

Ồ và cuối cùng bạn có thể thêm các chi tiết này vào nhiều dự án vì thứ tự xây dựng có thể thay đổi :)


Tôi tìm thấy một giải pháp tốt hơn! ###

Công cụTùy chọnDự án & Giải phápXây dựng và ChạyDự án MSBuild xây dựng mức độ chi tiết = Bình thường (hoặc trên Tối thiểu ). Điều này thêm thời gian trong đầu / đầu của cửa sổ đầu ra. Ctrl+ Hometrong cửa sổ đầu ra nên làm.

Nếu chúng ta muốn xem mỗi dự án mất bao nhiêu thời gian thì Dự án & Giải phápCài đặt dự án VC ++Xây dựng thời gian = có . Nó được áp dụng cho tất cả các dự án; "VC ++" là sai lệch.


1

Nếu bạn muốn gọi một chương trình bên ngoài có thể theo dõi tổng thời gian xây dựng của mình, bạn có thể sử dụng giải pháp sau cho VS 2010 (và có thể cũ hơn). Mã dưới đây sử dụng CTime của Casey Muratori. Tất nhiên bạn cũng có thể sử dụng nó để in thời gian xây dựng.

Mở trình thám hiểm macro và dán vào phần sau 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

Câu trả lời được lấy từ đâyđây .


1

Tùy chọn -> Dự án và Giải pháp -> Cài đặt dự án VC ++ -> Xây dựng thời gian

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.