2010-05-03 3 views
24

संभावित रूप से कोड से प्रोफाइलिंग चालू करने और बंद करने के कुछ तरीके?वीएस -2010 प्रोफाइलर: क्या एक विशिष्ट विधि को प्रोफाइल करना संभव है?

या आप प्रोफ़ाइल के लिए एक विशिष्ट कार्य का चयन कर सकते हैं?

उत्तर

28

आप अपनी रुचि के तरीकों के चारों ओर प्रोफाइलिंग शुरू करने और बंद करने के लिए प्रोफाइलर के डेटा संग्रह API का भी उपयोग कर सकते हैं। this MSDN article को पैदल यात्रा के लिए देखें।

इस मामले में एपीआई का उपयोग करने का सबसे अच्छा तरीका आपकी विधियों को निष्पादित करने से ठीक पहले StartProfile पर कॉल करना होगा और उसके बाद StopProfile पर कॉल करना होगा। आपको "प्रोफाइलिंग के साथ प्रारंभ करें" विकल्प के माध्यम से प्रोफाइलिंग शुरू करनी चाहिए ताकि आप प्रोफाइलिंग शुरू नहीं कर लेते जब तक आप StartProfile पर पहली कॉल नहीं दबाते।

डेटा संग्रह API का उपयोग नमूना या वाद्ययंत्र के साथ काम करेगा।

1

मत करो।

आप "बाधा" की तलाश में हैं, है ना?

शायद यह उस समारोह में नहीं है जहां आपको लगता है कि यह है।

This is the method I rely on, for any language or OS.

समस्या यह है कि समारोह में है, तो यह आपको बता देंगे। अगर यह कहीं और है, तो यह आपको बताएगा।


@downvoter: समस्या क्या है? यदि आप एप्लिकेशन स्टार्टअप की गति के बारे में चिंतित हैं, तो मैन्युअल रूप से एप्लिकेशन स्टार्टअप के दौरान नमूने लें।

एक प्रोफाइलर में विकल्प पूरे समय इसे चलाने के लिए है और फिर यह पता लगाने की कोशिश करें कि समय रेखा का कौन सा हिस्सा स्टार्टअप था। और चूंकि आप समय-समय पर उपयोगकर्ता-प्रतीक्षा में बिताए जाते हैं, जब आप नमूने नहीं चाहते हैं, तो आप इसे सीपीयू-नमूना मोड में डाल देते हैं। इसके साथ समस्या यह है कि आप आई/ओ समय लोड करने में काम नहीं करते हैं, डीएलएस लोड करना, डीएनएस पूछताछ आदि, जो स्टार्टअप के दौरान प्रभावी हो सकता है।

फिर प्रस्तुतिकरण की संपूर्ण समस्या "गर्म पथ" जैसी पूरी समस्या है, जहां वास्तविक समय लेने वाला easily hide कर सकता है।

यदि आप पूछ रहे हैं "मैं हजारों स्टैक नमूने कैसे देख सकता हूं?" जवाब आपको की आवश्यकता नहीं है। यदि स्टार्टअप काफी धीमा है, तो ऐसा इसलिए है क्योंकि यह अपने समय के कुछ बड़े अंश को कुछ करने की ज़रूरत नहीं है, ऐसा करने की आवश्यकता नहीं है - कुछ अंश, कहें, 30%, रूढ़िवादी होने के लिए। इसका मतलब है कि आप औसतन 3.33 नमूने एक बार देखेंगे। चूंकि आपको यह जानने के लिए दो या दो बार बार देखना है कि यह एक समस्या है, औसतन आपको 6.67 नमूने की आवश्यकता होती है। समस्या जितनी बड़ी होगी, कम नमूने आपको चाहिए। (यदि यह 9 0% है, तो आपको केवल 2/0.9 = 2.2 नमूने की आवश्यकता है।) यदि आप 20 नमूने की जांच करते हैं, तो आपको लगभग 10% से अधिक की कोई समस्या दिखाई देगी, और यदि आप इसे ठीक करते हैं, तो कोई भी छोटी समस्या बड़ी प्रतिशत लेती है - वे स्पीडअप अनुपात से बढ़ाए जाते हैं, इसलिए उन्हें अगले दौर में ढूंढना आसान होता है। Here's the math.

+0

कभी-कभी आप केवल दायरे को एप्लिकेशन के एक विशिष्ट भाग तक सीमित करना चाहते हैं ... उदाहरण के लिए। एक वेब एप्लिकेशन को शुरू करने में काफी समय लगता है (सिर्फ इसलिए कि इसमें बहुत कुछ करना है), लेकिन मैं यह देखना चाहता हूं कि स्टार्टअप प्रक्रिया में एक विशिष्ट भाग कैसे व्यवहार करता है, जो मैंने लिखा है, वह कोड नहीं है जो एएसपी के आधारभूत संरचना .NET अनुप्रयोग निष्पादित करता है। – rekna

+0

@rekna: ठीक है, तो अगर आप इसे डीबगर के तहत चला सकते हैं, तो स्टैक नमूने लें। यदि आपका दिनचर्या 10% से कम समय के ढेर पर है, तो संभावना है कि यह तेजी से लायक नहीं है - यह आपका फोन है। यदि यह उस स्टैक पर अधिक बार होता है, तो नमूने आपको बताएंगे कि यह किस समय अपना समय बिताता है (यानी यह कहां कॉल कर रहा है, और * वह * कॉलिंग आदि) प्रतिशत के आधार पर। यही कारण है कि आप सीधे उस कोड पर ले जाएंगे जो आप तेज कर सकते हैं, मान लीजिए कि कुछ है। (आमतौर पर वहाँ होता है।) –

+0

@rekna: .NET अनुप्रयोग स्टार्टअप के दौरान बहुत सारे हू-हा करते हैं - चीजें जिन्हें आप कभी अनुमान नहीं लगाते हैं, और वे आपके कोड के तहत हो सकते हैं और शायद नहीं। प्लगइन लोड करना, संसाधन लोड करना, डेटा संरचनाओं को प्रारंभ करना, यूआई नियंत्रण लोड करना, ग्रिड शुरू करना, ये सभी चीजें कोड के जंगली हंस के पीछाओं पर घूमने के लिए कुख्यात हैं। –

14

हाँ, एक छोटे से प्रयास से आप इस उपकरण की रूपरेखा यदि आप ऐसा (नमूना नहीं) कर सकते हैं:

  1. अपने द्विआधारी/परियोजना प्रदर्शन एक्सप्लोरर
  2. राइट-क्लिक में एक लक्ष्य के रूप में लक्ष्य पर, इंस्ट्रूमेंटेशन अनुभाग के लिए, उन्नत अनुभाग पर, गुण क्लिक करें
  3. जाओ अनचेक "छोटे कार्यों को शामिल न करें ..."
  4. जाओ "अतिरिक्त उपकरण विकल्प" के अंतर्गत तरीकों आप विशेष रूप से टी निर्दिष्ट ओ प्रोफ़ाइल (उदा। /include:ConsoleApp.Program::Main,MyNamespace.MyClass::MyFunc)

/include वाक्य रचना एक छोटे से अजीब है, लेकिन यदि आप एक वी.एस. कमांड प्रॉम्प्ट लॉन्च करें और अपने द्विआधारी की निर्देशिका करने के लिए जाते हैं, आप विधि की सूची आप शामिल स्पष्ट रूप से कर सकते हैं देखने के लिए vsinstr.exe /dumpfuncs foo.exe चला सकते हैं।

अधिक जानकारी के लिए vsinstr.exe command-line syntax देखें।

+0

ठीक है, नीचे दिए गए एक के लिए एक intresting विकल्प लगता है, thx !! – rekna

संबंधित मुद्दे