Visual Studio में बिल्ड टाइम प्रदर्शित करना?


177

हमारे C ++ प्रोजेक्ट्स को बनाने में हमारे बिल्ड सर्वर को बहुत अधिक समय लग रहा है। यह विजुअल स्टूडियो 2008 का उपयोग करता है। क्या समाधान में प्रत्येक परियोजना के निर्माण में लगने वाले समय को लॉग करने के लिए devenv.com प्राप्त करने का कोई तरीका है, ताकि मुझे पता हो कि मुझे अपने प्रयासों पर ध्यान कहाँ देना है?

इस मामले में बेहतर हार्डवेयर एक विकल्प नहीं है।

मैंने आउटपुट वर्बोसिटी (टूल्स / विकल्प / प्रोजेक्ट्स एंड सॉल्यूशंस / बिल्ड एंड रन / MSBuild प्रोजेक्ट बिल्ड आउटपुट वर्बोसिटी के तहत) सेट करने की कोशिश की है। यह आईडीई में कोई प्रभाव नहीं लगता है।

कमांड लाइन से MSBuild चलाते समय (और, Visual Studio 2008 के लिए, इसे MSBuild v3.5 होना चाहिए), यह अंत में कुल समय को प्रदर्शित करता है, लेकिन IDE में नहीं।

मैं वास्तव में समाधान में प्रत्येक परियोजना के लिए एक समय लेने वाली रिपोर्ट चाहता था, ताकि मैं यह पता लगा सकूं कि निर्माण प्रक्रिया अपना समय कहां ले रही थी।

वैकल्पिक रूप से, चूंकि हम वास्तव में निर्माण प्रक्रिया को चलाने के लिए NAnt का उपयोग करते हैं (हम Jetbrains TeamCity का उपयोग करते हैं), क्या प्रत्येक चरण के लिए मुझे समय बताने के लिए NAnt प्राप्त करने का कोई तरीका है?

जवाबों:


205

मेनू उपकरणविकल्पप्रोजेक्ट और समाधानवीसी ++ प्रोजेक्ट सेटिंग्सबिल्ड टाइमिंग काम करना चाहिए।


78
किसी को लगता है कि यह "बिल्ड एंड रन" के तहत होगा, लेकिन नूवो, जो कि साधारण होगा
थॉमस

6
अगर वे इसे वहाँ रख देते, तो किसी और ने शिकायत की होती कि यह वह जगह नहीं है जहाँ वे इसकी उम्मीद करेंगे। इसे लगाने के लिए सबसे स्पष्ट जगह अलग-अलग उपयोगकर्ताओं के लिए अलग-अलग है।
जेसपेरे

4
इसका आउटपुट क्या है?
कर्नल आतंक

4
@AndreasBonini: बिल्ड एंड रन के तहत आपको MSBuild प्रोजेक्ट बिल्ड आउटपुट वर्बोसिटी मिलेगी जिसे आप टाइमिंग पाने के लिए मिनिमल के ऊपर भी सेट कर सकते हैं।
जोए

4
यह एक निर्माण चरण के भीतर अलग-अलग कार्यों की रूपरेखा बनाने के लिए अच्छा है, लेकिन पूरे निर्माण का सारांश नहीं देता है।
फर्नांडो गोंजालेज सांचेज

88

टूल्स → विकल्प → प्रोजेक्ट्स एंड सॉल्यूशंस → बिल्ड एंड रन → MSBuild प्रोजेक्ट आउटपुट वर्बोसिटी - "सामान्य" या "विस्तृत" पर सेट करें, और निर्माण समय आउटपुट विंडो में दिखाई देगा।


2
Visual Studio 2010 से पहले, Visual C ++ प्रोजेक्ट MSBuild का उपयोग नहीं करते हैं, इसलिए इस सेटिंग का कोई प्रभाव नहीं पड़ता है। अन्य परियोजना प्रकारों के लिए ठीक काम करता है, हालांकि।
रोजर लिप्सकॉम्ब

23
"विस्तृत" के बजाय "सामान्य" पर सेट करना पर्याप्त है :)
andrecarlucci

7
इसे सामान्य पर सेट करना वास्तव में सबसे अधिक क्या होगा क्योंकि VC ++ प्रोजेक्ट सेटिंग्स -> बिल्ड टाइमिंग बहुत अधिक विवरण दिखाता है
Ghita

1
यह वही है जो अधिकांश लोग चाहते हैं - कुल समय, और नहीं कि ClCompile ने एक परियोजना में 22424ms लिया। Ctrl + Q, <Enter> बनाएँ और चलाएं, और पहले "न्यूनतम" को "सामान्य" में बदलें।
टॉमस गैंडर

36

विजुअल स्टूडियो 2012 - 2019

  • MSBuild प्रोजेक्ट्स के लिए (जैसे सभी .Net-Projects):
    क्लिक करें Tools -> Optionsऔर फिर चुनें Projects and Solutions -> Build and Run। बदलें MSBuild project build output verbosityकरने के लिए Normal। इसलिए यह प्रत्येक समाधान परियोजना में निर्मित समय को प्रदर्शित करेगा। लेकिन पूरी परियोजना में दुर्भाग्यपूर्ण समय बीता हुआ समय योग नहीं है। तुम भी निर्माण शुरू टाइमस्टैम्प देखेंगे

  • C / C ++ प्रोजेक्ट के लिए:

क्लिक करें Tools -> Optionsऔर फिर चुनें Projects and Solutions -> VC++ Project Settings

बदलें Build Timingकरने के लिए Yes


4
आपने जो समाधान पेश किया वह मेरे लिए वीएस 2015 पर सी ++ प्रोजेक्ट के लिए भी काम करता है। इसके अलावा, मैं इस समाधान का उपयोग करने के बजाय इसके Build Timingकुल समय को प्रदर्शित करता हूं ।
या बी

1
VS2019 के साथ कोई बदलाव नहीं। सभी MSBuild प्रोजेक्ट्स (C / C ++ सहित) के लिए कुल "समय बीत चुका" दिखाया गया है।
फ़रवे

9

विजुअल स्टूडियो 2012 के लिए आप बिल्ड मॉनिटर एक्सटेंशन का उपयोग कर सकते हैं ।


1
आप इसे विजुअल स्टूडियो 2013 और 2015 के लिए भी उपयोग कर सकते हैं।
Shad

6

यदि आप VS2005 पर अटक गए हैं तो आप बनाम बिल्ड-टाइमर प्लगइन का उपयोग कर सकते हैं । एक निर्माण के पूरा होने पर यह कुल लिया गया समय और प्रत्येक परियोजना अवधि का (वैकल्पिक) सारांश दर्शाता है।

अस्वीकरण; मैने यह लिखा। और हाँ, मुझे एक इंस्टॉलर बनाने की जरूरत है ... एक दिन!


क्या आपका इंस्टॉलर उपलब्ध है
मार्टिन

6

टूल्स-> विकल्प-> प्रोजेक्ट्स एंड सॉल्यूशंस-> बिल्ड एंड रन->

"न्यूनतम" से "MSBuild प्रोजेक्ट निर्माण आउटपुट वर्बोसिटी" सेट करें "सामान्य"


4

यदि आप अपने निर्माण की कल्पना करना चाहते हैं तो आप IncrediBuild का उपयोग कर सकते हैं। IncrediBuild अब स्टैंडअलोन-मोड में उपलब्ध है (वितरित नहीं है, लेकिन केवल आपके स्थानीय मशीन पर 8 कोर पर उपयोग के लिए) विज़ुअल स्टूडियो 2015 अपडेट के भाग के रूप में मुफ्त में उपलब्ध है।

अस्वीकरण: मैं IncrediBuild के लिए काम करता हूं


4

चूँकि आपके प्रश्न में कमांड लाइन से DevEnv का उपयोग करना शामिल है, मैं MSBuild (जो संशोधन के बिना .sln फ़ाइलों का निर्माण कर सकता हूं) का उपयोग करने का सुझाव भी दूंगा ।

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

msbuild /? आपको फिल्म निर्माता के लिए अन्य उपयोगी विकल्प दिखाएंगे।


4

मैंने बिल्ड समय को मापने और एक ग्राफ़ में घटनाओं के क्रम को प्रस्तुत करने के लिए एक एक्सटेंशन बनाया है: विज़ुअल स्टूडियो बिल्ड टाइमर

यहां छवि विवरण दर्ज करें

यह विजुअल स्टूडियो मार्केट प्लेस पर उपलब्ध है और VS2015, VS2017 और VS2019 के लिए काम करता है।

मुझे दृश्य प्रस्तुति काफी मददगार लगती है। यह दिखाने के अलावा कि कौन सी परियोजनाएँ अधिक समय लेती हैं, यह उनके बीच निर्भरता को भी दर्शाता है, अर्थात ऐसी परियोजनाएँ जो दूसरों के शुरू होने से पहले पूरी होने की प्रतीक्षा करती हैं। इस तरह आप बिल्ड में अड़चनें डाल सकते हैं और देख सकते हैं कि आपके निर्माण के समानांतर बढ़ने के लिए किन निर्भरताओं को तोड़ने की जरूरत है।


3
क्या आप इसे वीएस 2019 के समर्थन के लिए अपग्रेड कर सकते हैं
कॉन्स्टेंटिन चेरनोव

3
मैं इन दिनों थोड़ा व्यस्त हूं, लेकिन यह मेरी योजनाओं में है।
opetroch

2

मैं यहाँ समाप्त हुआ क्योंकि मैं निर्माण की तारीख और समय को आउटपुट में शामिल करना चाहता था। क्या दूसरों echo %date% %time%को प्रोजेक्ट के तहत प्री-बिल्ड और / या पोस्ट-बिल्ड इवेंट्स में जोड़ने के समान सरल होना चाहिए , गुणकंपाइलबिल्ड ईवेंट


2

पहले एक बिल्ड करें और देखें कि कौन सा प्रोजेक्ट पहली बार बिल्ड आउटपुट ( Ctrl+ Homeआउटपुट विंडो में) में दिखाई दे रहा है । उस प्रोजेक्ट पर राइट क्लिक करें → प्रोजेक्ट प्रॉपर्टीज़कम्पाइलबिल्ड इवेंट्सप्री-बिल्ड । और echo ###########%date% %time%#############

इसलिए हर बार जब आप बिल्ड परिणाम देखते हैं (या बिल्ड के दौरान) do Ctrl+Home उत्पादन विंडो में। और कहीं न कहीं उस क्षेत्र में समय और तारीख आपके चेहरे पर झलकती है!

ओह और हो सकता है कि आप इन विवरणों को कई परियोजनाओं में जोड़ दें क्योंकि निर्माण क्रम बदल सकता है :)


मुझे एक बेहतर समाधान मिला! ###

उपकरणविकल्पप्रोजेक्ट्स एंड सॉल्यूशंसबिल्ड एंड रनMSBuild प्रोजेक्ट आउटपुट वर्बोसिटी = सामान्य (या न्यूनतम ऊपर ) का निर्माण करता है। यह आउटपुट विंडो की शुरुआत / शीर्ष में समय जोड़ता है। Ctrl+Home आउटपुट विंडो में करना चाहिए।

यदि हम यह देखना चाहते हैं कि प्रत्येक प्रोजेक्ट में कितना समय लगता है तो प्रोजेक्ट्स एंड सॉल्यूशंसVC ++ प्रोजेक्ट सेटिंग्सबिल्ड टाइमिंग = हाँ । यह सभी परियोजनाओं पर लागू होता है; "VC ++" भ्रामक है।


1

यदि आप एक बाहरी कार्यक्रम को लागू करना चाहते हैं जो आपके कुल बिल्ड समय को ट्रैक कर सकता है, तो आप वीएस 2010 (और शायद पुराने) के लिए निम्नलिखित समाधान का उपयोग कर सकते हैं। नीचे दिए गए कोड केसी मुरैटी द्वारा 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

उत्तर यहाँ से लिया गया और यहाँ


1

विकल्प -> प्रोजेक्ट और समाधान -> वीसी ++ प्रोजेक्ट सेटिंग्स -> बिल्ड टाइमिंग

यहां छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.