แสดงเวลาสร้างใน Visual Studio หรือไม่


177

เซิร์ฟเวอร์การสร้างของเราใช้เวลานานเกินไปในการสร้างหนึ่งในโครงการ C ++ ของเรา ใช้ Visual Studio 2008 มีวิธีใดบ้างที่จะได้รับ devenv.com เพื่อบันทึกเวลาที่ใช้ในการสร้างแต่ละโครงการในการแก้ปัญหาเพื่อให้ฉันรู้ว่าจะมุ่งเน้นความพยายามของฉันอยู่ที่ไหน?

ฮาร์ดแวร์ที่ได้รับการปรับปรุงไม่ได้เป็นตัวเลือกในกรณีนี้

ฉันได้ลองตั้งค่า verbosity เอาท์พุท (ภายใต้เครื่องมือ / ตัวเลือก / โครงการและโซลูชั่น / สร้างและเรียกใช้ / MSBuild โครงการสร้างรายละเอียด verbosity) ดูเหมือนว่าจะไม่มีผลใด ๆ ใน IDE

เมื่อรัน MSBuild จากบรรทัดคำสั่ง (และสำหรับ Visual Studio 2008 จะต้องเป็น MSBuild v3.5) จะแสดงเวลาทั้งหมดที่ผ่านไปเมื่อสิ้นสุด แต่ไม่ใช่ใน IDE

ฉันต้องการรายงานตามเวลาสำหรับแต่ละโครงการในโซลูชันจริง ๆ เพื่อที่ฉันจะได้ทราบว่ากระบวนการสร้างนั้นใช้เวลาตรงไหน

อีกทางหนึ่งเนื่องจากเราใช้ NAnt เพื่อขับเคลื่อนกระบวนการสร้าง (เราใช้ Jetbrains TeamCity) มีวิธีที่จะให้ NAnt บอกเวลาที่ใช้ในแต่ละขั้นตอนหรือไม่?

คำตอบ:


205

เครื่องมือเมนู→ ตัวเลือกโปรเจ็กต์และโซลูชันการตั้งค่าโปรเจ็กต์ VC ++กำหนดเวลาบิลด์ควรทำงาน


78
ใครจะคิดว่ามันอยู่ภายใต้ "สร้างและเรียกใช้" แต่ nooooo ที่จะได้ง่าย
โทมัส Bonini

6
หากพวกเขาจะวางไว้ที่นั่นคนอื่นจะบ่นว่าไม่ใช่ที่ที่พวกเขาคาดหวังว่าจะเป็น สถานที่ที่ชัดเจนที่สุดในการทำให้ผู้ใช้แตกต่างกัน
JesperE

4
ผลลัพธ์ของสิ่งนี้คืออะไร
พันเอก Panic

4
@AndreasBonini: ภายใต้Build and RunคุณจะพบMSBuild project build output v outputerbosity ซึ่งคุณสามารถตั้งไว้เหนือMinimalเพื่อรับการกำหนดเวลาได้เช่นกัน
Joey

4
สิ่งนี้เป็นสิ่งที่ดีสำหรับการทำโปรไฟล์งานแต่ละงานภายในขั้นตอนการสร้าง แต่ไม่ได้ให้บทสรุปของงานสร้างทั้งหมด
เฟอร์นันโดกอนซาเลซซานเชซ

88

ไปที่เครื่องมือ→ตัวเลือก→โครงการและโซลูชัน→การสร้างและเรียกใช้→ MSBuild การสร้างผลลัพธ์ของการสร้างโครงการ - ตั้งค่าเป็น "ปกติ" หรือ "ละเอียด" และเวลาสร้างจะปรากฏในหน้าต่างผลลัพธ์


2
ก่อนหน้า Visual Studio 2010 โครงการ Visual C ++ จะไม่ใช้ MSBuild ดังนั้นการตั้งค่านี้จึงไม่มีผลกระทบ ใช้งานได้ดีสำหรับโครงการประเภทอื่น ๆ
Roger Lipscombe

23
ตั้งเป็น "ปกติ" แทน "ละเอียด" ก็พอ :)
andrecarlucci

7
การตั้งค่านี้เพื่อปกติย่อมเป็นสิ่งที่ดีที่สุดเพราะต้องการตั้งค่าโครงการ VC ++ -> รูปร่างกำหนดเวลาแสดงให้เห็นรายละเอียดมากเกินไป
Ghita

1
นี่คือสิ่งที่คนส่วนใหญ่ต้องการ - รวมเวลาทั้งหมดและไม่ใช่ที่ ClCompile ใช้เวลา 22424ms ในหนึ่งในโครงการ Ctrl + Q สร้างและเรียกใช้ <Enter> และเปลี่ยน "น้อยที่สุด" เป็น "ปกติ" ก่อน
Tomasz Gandor

36

Visual Studio 2012 - 2019

  • สำหรับโครงการ MSBuild (เช่นทุกสุทธิ-โครงการ):
    คลิ๊กแล้วเลือกTools -> Options Projects and Solutions -> Build and Runเปลี่ยนไปMSBuild project build output verbosity Normalดังนั้นมันจะแสดง Time Elapsed ในทุกโปรเจค Solution ที่สร้างขึ้น แต่น่าเสียดายที่ไม่มีผลรวมเวลาที่ผ่านไปในทุกโครงการ คุณจะเห็นการประทับเวลาเริ่มต้นของ Build

  • สำหรับโครงการ C / C ++:

คลิกแล้วเลือกTools -> OptionsProjects and Solutions -> VC++ Project Settings

เปลี่ยนไปBuild TimingYes


4
โซลูชันที่คุณเสนอใช้ได้กับฉันใน VS 2015 สำหรับโครงการ C ++ ด้วย นอกจากนี้ฉันเลือกใช้โซลูชันนี้แทนBuild Timingเนื่องจากจะแสดงเวลาทั้งหมดเท่านั้น
หรือ B

1
ไม่มีการเปลี่ยนแปลงกับ VS2019 "เวลาที่ผ่านไป" ทั้งหมดจะปรากฏขึ้นสำหรับโครงการ MSBuild ทั้งหมด (รวมถึง C / C ++)
Farway


6

หากคุณติดอยู่ใน VS2005 คุณสามารถใช้VS-สร้างจับเวลาปลั๊กอิน เมื่อเสร็จสิ้นการสร้างมันจะแสดงเวลาทั้งหมดที่ใช้และสรุป (เป็นทางเลือก) ของระยะเวลาของแต่ละโครงการ

ขอสงวนสิทธิ์; ฉันเขียนมัน และใช่ฉันต้องสร้างโปรแกรมติดตั้ง ... หนึ่งวัน!


สามารถติดตั้งได้หรือไม่
Martin

6

เครื่องมือ -> ตัวเลือก -> โครงการและโซลูชั่น -> สร้างและเรียกใช้ ->

ตั้งค่า "การสร้างรายละเอียดของผลลัพธ์โครงการสร้าง MSBuild" จาก "น้อยที่สุด" เป็น "ปกติ"


4

หากคุณต้องการเห็นภาพสิ่งสร้างของคุณคุณสามารถใช้ IncrediBuild ตอนนี้ IncrediBuild พร้อมใช้งานในโหมดสแตนด์อโลน (ไม่กระจาย แต่ใช้สำหรับ 8 คอร์บนเครื่องของคุณเท่านั้น) ฟรีเป็นส่วนหนึ่งของการอัปเดต Visual Studio 2015 1

ข้อจำกัดความรับผิดชอบ: ฉันทำงานให้ IncrediBuild


4

เนื่องจากคำถามของคุณเกี่ยวข้องกับการใช้ DevEnv จากบรรทัดคำสั่งฉันขอแนะนำให้ใช้MSBuild (ซึ่งสามารถสร้างไฟล์. sln โดยไม่มีการดัดแปลง)

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

msbuild /? จะแสดงตัวเลือกที่มีประโยชน์อื่น ๆ ให้กับ filelogger


4

ผมได้สร้างส่วนขยายในการวัดการสร้างครั้งและนำเสนอลำดับของเหตุการณ์ที่เกิดขึ้นในกราฟ: Visual Studio จับเวลารูปร่าง

ป้อนคำอธิบายรูปภาพที่นี่

มันมีอยู่ในตลาดสตูดิโอภาพและทำงานสำหรับ VS2015, VS2017 และ VS2019

ฉันพบว่าการนำเสนอด้วยภาพมีประโยชน์มาก นอกเหนือจากการแสดงโครงการที่ใช้เวลานานแล้วยังแสดงการพึ่งพาระหว่างกันเช่นโครงการที่รอให้โครงการอื่นดำเนินการให้เสร็จก่อนที่จะเริ่ม วิธีนี้คุณสามารถมองเห็นปัญหาคอขวดในการสร้างและดูว่าการพึ่งพาใดที่จำเป็นต้องมีการแบ่งเพื่อเพิ่มการขนานของการสร้างของคุณ


3
คุณช่วยอัพเกรดมันให้รองรับ VS 2019
Konstantin Chernov ได้

3
วันนี้ฉันยุ่งนิดหน่อย แต่มันอยู่ในแผนของฉัน
opetroch

2

ฉันลงเอยที่นี่เพราะฉันแค่ต้องการวันที่และเวลารวมอยู่ในงานสร้าง ควรที่คนอื่น ๆ จะค้นหาสิ่งที่คล้ายกันมันง่ายเหมือนการเพิ่มecho %date% %time%การ Pre-สร้างและ / หรือโพสต์สร้างเหตุการณ์ที่เกิดขึ้นภายใต้โครงการอสังหาริมทรัพย์รวบรวม → สร้างเหตุการณ์


2

ทำบิลด์ก่อนแล้วดูว่าโปรเจ็กต์ใดปรากฏก่อนในบิลด์เอาท์ ( Ctrl+ Homeในหน้าต่างเอาต์พุต) คลิกขวาที่โครงการ→ คุณสมบัติโครงการรวบรวมสร้างเหตุการณ์สร้างล่วงหน้า และecho ###########%date% %time%#############.

ดังนั้นทุกครั้งที่คุณเห็นผลลัพธ์การสร้าง (หรือระหว่างการสร้าง) ให้ทำCtrl+ Homeในหน้าต่างผลลัพธ์ และบางแห่งในพื้นที่นั้นเวลาและวันที่จ้องมองที่ใบหน้าของคุณ!

โอ้และคุณอาจท้ายเพิ่มรายละเอียดเหล่านี้ในหลาย ๆ โครงการเนื่องจากคำสั่งการสร้างสามารถเปลี่ยนแปลงได้ :)


ฉันพบทางออกที่ดีกว่า! ###

เครื่องมือตัวเลือกโครงการและโซลูชัน →การสร้างและเรียกใช้MSBuild การสร้างผลลัพธ์โครงการ verbosity = ปกติ (หรือสูงกว่าน้อยที่สุด ) นี่เป็นการเพิ่มเวลาในหน้าต่างเริ่มต้น / ด้านบน Ctrl+ Homeในหน้าต่างผลลัพธ์ควรทำ

ถ้าเราต้องการที่จะเห็นเท่าใดเวลาที่แต่ละโครงการใช้แล้วโครงการและโซลูชั่นVC ตั้งค่าโครงการ ++Timing รูปร่าง = yes มันใช้ได้กับทุกโครงการ "VC ++" ทำให้เข้าใจผิด


1

หากคุณต้องการเรียกใช้โปรแกรมภายนอกที่สามารถติดตามเวลาสร้างทั้งหมดของคุณคุณสามารถใช้โซลูชันต่อไปนี้สำหรับ VS 2010 (และอาจเก่ากว่า) รหัสด้านล่างใช้ CTime โดย Casey Muratori แน่นอนคุณสามารถใช้มันเพื่อพิมพ์เวลาสร้างได้

เปิดแมโคร explorer และวางสิ่งต่อไปนี้ก่อนหน้า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.