2009-07-02 11 views
6

मैं सी # .NET में किसी अन्य प्रोग्राम के लिए प्लग-इन लिख रहा हूं, और इसमें प्रदर्शन समस्याएं हैं जहां कमांड बहुत अधिक समय लेते हैं तो मैं चाहता हूं। प्लग-इन होस्ट प्रोग्राम में घटनाओं पर प्रतिक्रिया करता है, और होस्ट प्रोग्राम एसडीके के उपयोगिता विधियों पर भी निर्भर करता है। मेरे प्लग-इन में बहुत सारे रिकर्सिव फ़ंक्शन हैं क्योंकि मैं पेड़ की संरचना में बहुत कुछ पढ़ रहा हूं और लिख रहा हूं। इसके अलावा मेरे पास मेरे प्लगइन और होस्ट एप्लिकेशन के साथ-साथ मेरे प्लग-इन में कक्षाओं के बीच ईवेंट सदस्यता के बीच कई ईवेंट सदस्यताएं हैं।प्रदर्शन समस्याओं को डीबग करने का सबसे अच्छा तरीका क्या है?

मैं कैसे समझ सकता हूं कि कार्य पूरा करने में कितना समय लग रहा है? मैं नियमित ब्रेकपॉइंट स्टाइल डिबगिंग का उपयोग नहीं कर सकता, क्योंकि ऐसा नहीं है कि यह काम नहीं करता है यह सिर्फ इतना धीमा है। मैंने एक स्थिर "लॉगवाइटर" वर्ग स्थापित किया है जिसे मैं अपने सभी वर्गों से संदर्भित कर सकता हूं जो मुझे मेरे कोड से लॉग फ़ाइल में टाइमस्टैम्प लाइनों को लिखने की अनुमति देगा। क्या कोई और तरीका है? क्या दृश्य स्टूडियो किसी प्रकार का टाइमस्टैम्प लॉग रखता है जिसे मैं इसके बजाय उपयोग कर सकता हूं? एप्लिकेशन बंद होने के बाद कॉल स्टैक देखने के लिए कोई रास्ता है?

उत्तर

15

आप प्रोफाइलर उपयोग करने के लिए की जरूरत है। यहां अच्छे से लिंक करें: ANTS Performance Profiler

अद्यतन: आप Debug.Write का उपयोग कर नियंत्रण बिंदुओं में संदेश भी लिख सकते हैं। फिर आपको DebugView एप्लिकेशन लोड करने की आवश्यकता है जो सटीक समय टिकट के साथ आपकी सभी डीबग स्ट्रिंग प्रदर्शित करता है। यह फ्रीवेयर और त्वरित डिबगिंग और प्रोफाइलिंग के लिए बहुत अच्छा है।

+0

लाल गेट निश्चित रूप से अच्छा सॉफ्टवेयर बनाता है। उनके एएनटीएस प्रदर्शन प्रोफाइलर मेरी राय में सर्वश्रेष्ठ में से एक है। मेरा मानना ​​है कि आप एक परीक्षण संस्करण डाउनलोड कर सकते हैं। बाद में वास्तविक संस्करण खरीदने वाले अधिकांश लोग चेतावनी देते हैं :)। – bastijn

+1

अच्छी तरह से माइक्रोसॉफ्ट प्रोफाइलर भी अच्छा है, लेकिन यह केवल महंगे वीएस पैक में शामिल है। – arbiter

+0

मेरे द्वारा एएनटीएस के लिए अंगूठे भी, मेरे लिए एक बड़ी मेमोरी रिसाव का हल –

1

लगता है जैसे आप एक कोड 'प्रोफाइलर' चाहते हैं। http://en.wikipedia.org/wiki/Code_profiler#Use_of_profilers

मैं अपरिचित हूं कि कौन से प्रोफाइलर सी # के लिए सबसे अच्छे हैं, लेकिन मैं एक त्वरित Google के बाद इस लिंक पर आया जिसमें मुफ्त ओपन-सोर्स प्रसाद की सूची है। मुझे यकीन है कि किसी और पर विचार कौन सा लायक हैं पता चल जाएगा हूँ :)

http://csharp-source.net/open-source/profilers

1

इस विषय के शीर्षक के बावजूद मुझे तर्क देना चाहिए कि "सर्वश्रेष्ठ" तरीका व्यक्तिपरक है, हम केवल संभावित समाधान सुझा सकते हैं।

मुझे Redgate ANTS Performance Profiler का उपयोग करने का अनुभव हुआ है जो आपको दिखाएगा कि आपके आवेदन में बाधाएं कहां हैं। यह निश्चित रूप से जांचने लायक है।

4

My Profiler List में एएनटीएस, डॉटट्रेस और एकटाइम शामिल हैं।


हालांकि, अपने प्रश्न में और अधिक बारीकी से देख, मुझे लगता है कि आप एक ही समय आप रूपरेखा कर रहे हैं पर कुछ इकाई परीक्षण करना चाहिए। शायद एक त्वरित समग्र प्रदर्शन स्कैन करके शुरू करें, यह देखने के लिए कि किन क्षेत्रों को अधिक ध्यान देने की आवश्यकता है। फिर उन क्षेत्रों के लिए कुछ यूनिट परीक्षण लिखना शुरू करें। फिर आप उन यूनिट परीक्षणों को चलाने के दौरान प्रोफाइलर चला सकते हैं, ताकि आपको लगातार परिणाम मिल सकें।

1

विजुअल स्टूडियो टीम सिस्टम में एक प्रोफाइलर है जो इसे दूर से बेक किया गया है, लेकिन सरल अनुप्रयोगों के लिए आप इसे काम करने के लिए प्राप्त कर सकते हैं।

हाल ही में मुझे EQATECs मुफ्त प्रोफाइलर के साथ सबसे अधिक सफलता मिली है, या जहां आवश्यकता हो, अपनी खुद की छोटी प्रोफाइलिंग कक्षा को घुमाएं।http://www.google.com.au/search?hl=en&q=site:stackoverflow.com+.net+profiler&btnG=Google+Search&meta=&aq=f&oq=

+0

+1। – arbiter

0

तुम भी asp.net अनुप्रयोगों के लिए प्रदर्शन काउंटर का उपयोग कर सकते हैं:

इसके अलावा, वहाँ है कि पिछले देखने में प्रोफाइलर के बारे में काफी कुछ सवाल किए गए हैं।

2

मेरे अनुभव में, सबसे अच्छी विधि भी सबसे सरल है। इसे चलाना, और धीमा होने पर, आईडीई में "रोकें" बटन दबाएं। फिर कॉल स्टैक का रिकॉर्ड बनाएं। इसे कई बार दोहराएं। (Here's a more detailed example and explanation.)

जो भी आप खोज रहे हैं वह कोई भी कथन है जो एक से अधिक स्टैक नमूने पर दिखाई देता है जो कड़ाई से जरूरी नहीं है। जितना अधिक नमूना लगता है, उतना ही अधिक समय लगता है। यह बताने का तरीका है कि कथन आवश्यक है या नहीं, क्योंकि यह आपको बताता है कि यह क्यों किया जा रहा है।

कुछ भी जो उपभोग करने के लिए पर्याप्त मात्रा का कारण बनता है, इस विधि द्वारा प्रकट किया जाएगा, और रिकर्सन इससे परेशान नहीं होता है।

लोग दो तरीकों में से एक में इस तरह समस्याओं से निपटने के लग रहे हैं: कुछ भी करने से पहले अच्छी माप प्राप्त करने के लिए

  1. प्रयास करें।

  2. बस कुछ बड़ा ढूंढें जिसे आप छुटकारा पा सकते हैं, इसे चीर सकते हैं, और दोहराना चाहते हैं।

मैं उत्तरार्द्ध पसंद करते हैं, यह तेजी से है, क्योंकि, और यह काफी बड़ा दूर करने के लिए है पता करने के लिए है क्योंकि आप को पता है ठीक कितना बड़ा एक ट्यूमर है नहीं है। आपको यह जानने की ज़रूरत है कि यह कहां है, और यही वह तरीका है जो आपको बताता है।

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