Menampilkan waktu pembuatan di Visual Studio?


177

Server build kami terlalu lama untuk membangun salah satu proyek C ++ kami. Ini menggunakan Visual Studio 2008. Apakah ada cara untuk membuat devenv.com mencatat waktu yang dibutuhkan untuk membangun setiap proyek dalam solusi, sehingga saya tahu di mana harus memfokuskan upaya saya?

Perangkat keras yang ditingkatkan bukan merupakan opsi dalam hal ini.

Saya sudah mencoba mengatur verbositas keluaran (di bawah Alat / Opsi / Proyek dan Solusi / Bangun dan Jalankan / proyek MSBuild membangun verbositas keluaran). Ini sepertinya tidak berpengaruh pada IDE.

Saat menjalankan MSBuild dari baris perintah (dan, untuk Visual Studio 2008, harus MSBuild v3.5), ini menampilkan total waktu yang telah berlalu di bagian akhir, tetapi tidak di IDE.

Saya benar-benar ingin laporan yang diambil waktu untuk setiap proyek dalam solusi, sehingga saya bisa mencari tahu di mana proses pembangunan mengambil waktu.

Atau, karena kita benar-benar menggunakan NAnt untuk mendorong proses pembangunan (kami menggunakan Jetbrains TeamCity), apakah ada cara untuk membuat NAnt memberi tahu saya waktu yang diperlukan untuk setiap langkah?

Jawaban:


205

Alat Menu → PilihanProyek dan SolusiVC ++ Pengaturan ProyekWaktu Pembuatan harus bekerja.


78
Orang akan berpikir itu di bawah "Build and Run", tapi tidaaaak, itu akan menjadi sederhana
Thomas Bonini

6
Jika mereka meletakkannya di sana, orang lain akan mengeluh bahwa itu bukan tempat yang mereka harapkan. Tempat yang paling jelas untuk menggambarkannya berbeda untuk pengguna yang berbeda.
JesperE

4
Apa hasil dari ini?
Kolonel Panic

4
@AndreasBonini: Di ​​bawah Build and Run Anda akan menemukan proyek MSBuild membangun output output yang dapat Anda atur di atas Minimal untuk mendapatkan timing juga.
Joey

4
Ini bagus untuk membuat profil tugas individu dalam tahap pembuatan, tetapi tidak memberikan ringkasan keseluruhan pembuatan.
Fernando Gonzalez Sanchez

88

Pergi ke Alat → Pilihan → Proyek dan Solusi → Bangun dan Jalankan → Proyek MSBuild membangun verbositas keluaran - diatur ke "Normal" atau "Detail", dan waktu build akan muncul di jendela output.


2
Sebelum ke Visual Studio 2010, proyek Visual C ++ tidak menggunakan MSBuild, jadi pengaturan ini tidak berpengaruh. Namun, berfungsi dengan baik untuk jenis proyek lainnya.
Roger Lipscombe

23
set ke "Normal" bukan "Detail" sudah cukup :)
andrecarlucci

7
Mengatur ini ke Normal memang yang paling diinginkan karena VC ++ Pengaturan Proyek -> Build Timing menunjukkan terlalu banyak detail
Ghita

1
Inilah yang diinginkan kebanyakan orang - total waktu, dan bukan berarti ClCompile mengambil 22424ms dalam salah satu proyek. Ctrl + Q, bangun dan jalankan <Enter>, dan ubah dulu "minimal" menjadi "normal".
Tomasz Gandor

36

Visual Studio 2012 - 2019

  • Untuk Proyek MSBuild (mis. Semua .Net-Projects):
    Klik Tools -> Optionsdan kemudian pilih Projects and Solutions -> Build and Run. Ubah MSBuild project build output verbosityke Normal. Sehingga ia akan menampilkan Waktu yang Sudah Berlalu dalam setiap Proyek Solusi yang dibangunnya. Namun sayangnya tidak ada Jumlah Waktu Berlalu atas semua proyek. Anda juga akan melihat Timestamp mulai pembangunan

  • UNTUK Proyek C / C ++:

Klik Tools -> Optionslalu pilih Projects and Solutions -> VC++ Project Settings.

Ubah Build Timingke Yes.


4
Solusi yang Anda tawarkan bekerja untuk saya di VS 2015 untuk proyek C ++ juga. Juga, saya memilih untuk menggunakan solusi ini daripada Build Timinghanya menampilkan waktu total saja.
Atau B

1
Tidak ada perubahan dengan VS2019. Total "waktu berlalu" ditampilkan untuk semua Proyek MSBuild (termasuk C / C ++).
Farway

9

Untuk Visual Studio 2012 Anda bisa menggunakan ekstensi Build Monitor .


1
Anda bisa menggunakannya untuk Visual Studio 2013 dan 2015 juga.
Shad

6

Jika Anda terjebak pada VS2005 Anda bisa menggunakan plugin vs-build-timer . Pada penyelesaian membangun itu menunjukkan total waktu yang diambil dan ringkasan (opsional) dari masing-masing durasi proyek.

Penolakan; Saya menulisnya. Dan ya, saya perlu membuat installer ... suatu hari!


Apakah penginstal Anda tersedia
Martin

6

Alat-> Opsi-> Proyek dan Solusi-> Bangun dan Jalankan->

Setel "MSBuild project build output verbosity" dari "Minimal" ke "Normal"


4

Jika Anda ingin memvisualisasikan bangunan Anda, Anda dapat menggunakan IncrediBuild. IncrediBuild sekarang tersedia dalam mode mandiri (tidak didistribusikan tetapi hanya digunakan pada 8 core pada mesin lokal Anda) secara gratis sebagai bagian dari Pembaruan Visual Studio 2015 1

Penafian: Saya bekerja untuk IncrediBuild


4

Karena pertanyaan Anda melibatkan penggunaan DevEnv dari baris perintah, saya juga menyarankan menggunakan MSBuild (yang dapat membangun file .sln tanpa modifikasi).

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

msbuild /? akan menunjukkan kepada Anda opsi lain yang bermanfaat untuk filelogger.


4

Saya telah membuat ekstensi untuk mengukur waktu pembuatan dan menyajikan urutan peristiwa dalam grafik: Visual Studio Build Timer .

masukkan deskripsi gambar di sini

Ini tersedia di pasar visual studio dan berfungsi untuk VS2015, VS2017 dan VS2019.

Saya menemukan presentasi visual cukup membantu. Selain menunjukkan proyek mana yang lebih lama, itu juga menunjukkan ketergantungan di antara mereka, yaitu proyek yang menunggu orang lain untuk menyelesaikan sebelum mereka mulai. Dengan cara ini Anda bisa melihat kemacetan di build dan melihat dependensi apa yang perlu dipecahkan untuk meningkatkan paralelisasi build Anda.


3
Bisakah Anda memutakhirkannya untuk mendukung VS 2019
Konstantin Chernov

3
Saya agak sibuk akhir-akhir ini, tetapi ini ada dalam rencana saya.
opetroch

2

Saya berakhir di sini karena saya hanya ingin tanggal dan waktu dimasukkan dalam output build. Jika orang lain mencari sesuatu yang serupa itu sesederhana menambah echo %date% %time%acara Pra-bangun dan / atau pasca-bangun dalam proyek, PropertiesCompileBuild Events .


2

Lakukan build terlebih dahulu dan lihat proyek mana yang muncul pertama kali di build output ( Ctrl+ Homedi jendela output). Klik kanan proyek itu → Properti ProyekKompilasiBangun AcaraPra-bangun . Dan echo ###########%date% %time%#############.

Jadi setiap kali Anda melihat hasil build (atau selama build) lakukan Ctrl+ Homedi jendela output. Dan di suatu tempat di daerah itu waktu dan tanggal menatap wajah Anda!

Oh dan Anda mungkin akhirnya menambahkan detail ini ke banyak proyek karena pesanan build dapat berubah :)


Saya menemukan solusi yang lebih baik! ###

AlatPilihanProyek & SolusiBangun dan JalankanProyek MSBuild membangun output verbosity = Normal (atau di atas Minimal ). Ini menambah waktu di awal / atas jendela output. Ctrl+ Homedi jendela output harus dilakukan.

Jika kita ingin melihat berapa banyak waktu yang dibutuhkan masing-masing proyek maka Proyek & SolusiVC ++ Pengaturan ProyekWaktu Pembuatan = ya . Ini berlaku untuk semua proyek; "VC ++" menyesatkan.


1

Jika Anda ingin menjalankan program eksternal yang dapat melacak total waktu build Anda, Anda dapat menggunakan solusi berikut untuk VS 2010 (dan mungkin lebih lama). Kode di bawah ini menggunakan CTime oleh Casey Muratori. Tentu saja Anda juga dapat menggunakannya untuk mencetak waktu pembuatan.

Buka penjelajah makro, dan rekatkan yang berikut ini sebelumnya 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

Jawaban diambil dari sini dan sini .


1

Pilihan -> Proyek dan Solusi -> VC ++ Pengaturan Proyek -> Build Timing

masukkan deskripsi gambar di sini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.