Visual Studio'da derleme süreleri mi görüntüleniyor?


177

Yapı sunucumuz, C ++ projelerimizden birini oluşturmak için çok uzun sürüyor. Visual Studio 2008'i kullanıyor. Devenv.com'u çözümdeki her projeyi oluşturmak için harcanan zamanı günlüğe kaydetmenin bir yolu var mı, böylece çabalarımı nereye odaklayacağımı biliyorum?

Bu durumda gelişmiş donanım bir seçenek değildir.

Çıktı ayrıntı düzeyini ayarlamaya çalıştım (Araçlar / Seçenekler / Projeler ve Çözümler / Derleme ve Çalıştır / MSBuild proje derleme çıktı ayrıntısı). Bunun IDE üzerinde herhangi bir etkisi yok gibi görünüyor.

MSBuild komut satırından çalıştırıldığında (ve Visual Studio 2008 için MSBuild v3.5 olması gerekir), sonunda geçen toplam süreyi görüntüler, ancak IDE'de gösterilmez.

Çözümdeki her proje için gerçekten zaman alan bir rapor istedim, böylece inşa sürecinin nerede zaman aldığını anlayabildim.

Alternatif olarak, oluşturma işlemini yürütmek için aslında NAnt kullandığımız için (Jetbrains TeamCity kullanıyoruz), NAnt'yi her adım için harcanan zamanı söylemesini sağlamanın bir yolu var mı?

Yanıtlar:


205

Menü AraçlarSeçeneklerProjeler ve ÇözümlerVC ++ Proje AyarlarıDerleme Zamanlaması çalışmalıdır.


78
Biri "Yap ve Çalıştır" altında düşünürdü, ama bu basit olurdu nooooo
Thomas Bonini

6
Eğer oraya koyarlarsa, başka biri bunun olmasını bekledikleri yerde olmadığından şikayet ederdi. Koymak için en belirgin yer farklı kullanıcılar için farklıdır.
JesperE

4
Bunun çıktısı nedir?
Albay Panik

4
@AndreasBonini: Altında Build'a ve Run bulacaksınız MSBuild proje inşa çıktı ayrıntı yukarıda ayarlayabilirsiniz Minimal de zamanlamaları olsun.
Joey

4
Bu, bir yapı aşamasında bireysel görevleri profillemek için iyidir, ancak tüm yapının özetleri verilmez.
Fernando Gonzalez Sanchez

88

Araçlar → Seçenekler → Projeler ve Çözümler → Derleme ve Çalıştırma → MSBuild proje derlemesi çıktı ayrıntı düzeyi - "Normal" veya "Ayrıntılı" olarak ayarlandığında, derleme süresi çıkış penceresinde görünür.


2
Visual Studio 2010'dan önce, Visual C ++ projeleri MSBuild kullanmaz, bu nedenle bu ayarın bir etkisi yoktur. Yine de, diğer proje türleri için iyi çalışıyor.
Roger Lipscombe

23
"Ayrıntılı" yerine "Normal" olarak ayarlanması yeterlidir :)
andrecarlucci

7
Bunu Normal olarak ayarlamak gerçekten en çok istediği şeydir çünkü VC ++ Proje Ayarları -> Derleme Zamanlaması çok fazla ayrıntı gösterir
Ghita

1
Tam olarak çoğu insanın istediği şey budur - ClCompile'ın projelerden birinde 22424 ms sürmesi değil. Ctrl + Q tuşlarına basın, <Enter> öğesini oluşturun ve çalıştırın ve ilk "minimal" değeri "normal" olarak değiştirin.
Tomasz Gandor

36

Visual Studio 2012-2019

  • MSBuild Projeleri için (örn. Tüm .Net-Projects):
    öğesini Tools -> Optionstıklatıp seçin Projects and Solutions -> Build and Run. Değişim MSBuild project build output verbosityiçin Normal. Böylece oluşturduğu her Çözüm Projesinde Geçen Süreyi görüntüler. Ancak talihsiz bir şekilde tüm projelerde Geçen Zaman Toplamı yoktur. Ayrıca Derleme başlangıcı Zaman Damgasını göreceksiniz

  • C / C ++ Projesi İÇİN:

Öğesini tıklayın Tools -> Optionsve ardından öğesini seçin Projects and Solutions -> VC++ Project Settings.

Değişim Build Timingiçin Yes.


4
Sunduğunuz çözüm benim için bir C ++ projesi için VS 2015'te çalışıyor. Ayrıca, Build Timingyalnızca toplam süreyi görüntülediğinden bu çözümü kullanmayı tercih ederim .
Veya B

1
VS2019 ile değişiklik yok. Toplam "geçen süre" tüm MSBuild Projeleri için gösterilir (C / C ++ dahil).
Farway



6

Araçlar-> Seçenekler-> Projeler ve Çözümler-> İnşa Et ve Çalıştır->

"MSBuild proje derlemesi çıktı ayrıntı düzeyini" "Minimal" değerinden "Normal" olarak ayarlayın


4

Yapınızı görselleştirmek istiyorsanız IncrediBuild'i kullanabilirsiniz. IncrediBuild artık Visual Studio 2015 Güncelleştirme 1'in bir parçası olarak bağımsız modda (dağıtılmamış, ancak yerel makinenizde yalnızca 8 çekirdeğin kullanımı için) kullanılabilir.

Feragatname: IncrediBuild için çalışıyorum


4

Sorunuz komut satırından DevEnv kullanmayı içerdiğinden, MSBuild (değiştirmeden .sln dosyaları oluşturabilir) kullanmanızı da öneririm .

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

msbuild /? size dosya kaydedici için diğer kullanışlı seçenekleri gösterecektir.


4

Derleme sürelerini ölçmek ve bir grafikte olayların sırasını sunmak için bir uzantı oluşturduk: Visual Studio Build Timer .

resim açıklamasını buraya girin

Görsel stüdyo pazarında mevcuttur ve VS2015, VS2017 ve VS2019 için çalışır.

Görsel sunumu oldukça faydalı buluyorum. Hangi projelerin daha uzun sürdüğünü göstermenin yanı sıra, aralarındaki bağımlılıkları da gösterir, yani başkalarının başlamadan önce tamamlanmasını bekleyen projeler. Bu şekilde yapıdaki darboğazları tespit edebilir ve yapınızın paralelliğini artırmak için hangi bağımlılıkların kırılması gerektiğini görebilirsiniz.


3
VS 2019'u desteklemek için yükseltebilir misiniz
Konstantin Chernov

3
Bugünlerde biraz meşgulüm, ama planlarımda.
opetroch

2

Buraya geldim çünkü sadece yapı çıktısında yer alan tarih ve saati istedim. Diğerleri benzer bir şey arıyorlarsa, echo %date% %time%proje, ÖzelliklerDerlemeOluşturma Etkinlikleri altında Derleme öncesi ve / veya Derleme sonrası etkinliklerine eklemek kadar basittir .


2

Önce bir derleme yapın ve derleme çıktısında ( çıktı penceresinde Ctrl+ Home) ilk olarak hangi projenin göründüğüne bakın . Bu projeye sağ tıklayın → Proje ÖzellikleriDerleOlaylar OluşturÖn derleme . Ve echo ###########%date% %time%#############.

Derleme sonuçlarını (veya derleme sırasında) her gördüğünüzde çıkış penceresinde Ctrl+ yapın Home. Ve o bölgede bir yerde zaman ve tarih yüzünüze bakıyor!

Oh ve inşaat siparişi değişebileceği için bu detayları birçok projeye ekleyebilirsiniz :)


Daha iyi bir çözüm buldum! ###

AraçlarSeçeneklerProjeler ve ÇözümlerDerleme ve ÇalıştırmaMSBuild proje derlemesi çıktı ayrıntı düzeyi = Normal (veya Minimal üstü ). Bu, çıkış penceresinin başına / üstüne zaman ekler. Ctrl+ Homeçıkış penceresinde yapmalısınız.

Her bir projenin ne kadar zaman aldığını görmek istiyorsak, Projeler ve ÇözümlerVC ++ Proje AyarlarıDerleme Zamanlaması = evet . Tüm projeler için geçerlidir; "VC ++" yanıltıcıdır.


1

Toplam oluşturma sürelerinizi takip edebilen harici bir programı çağırmak istiyorsanız, VS 2010 (ve belki de daha eski) için aşağıdaki çözümü kullanabilirsiniz. Aşağıdaki kod Casey Muratori tarafından CTime kullanmaktadır. Tabii ki sadece inşa süresi yazdırmak için kullanabilirsiniz.

Makro gezginini açın ve önce aşağıdakileri yapıştırın 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

Cevap buradan ve buradan alınmıştır .


1

Seçenekler -> Projeler ve Çözümler -> VC ++ Proje Ayarları -> Derleme Zamanlaması

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.