2013-04-10 6 views
5

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

मेरी व्याख्या यह थी कि उपकरण कुछ तरीकों/कॉलों को लंबे समय तक लेता है या किसी विधि के कौन से हिस्सों में काफी समय लगता है, इसका कुछ प्रतिनिधित्व प्रदान कर रहा है। अब यह एक अमूर्त (प्रतिशत) या कुछ पूर्ण (समय (एमएस) हो सकता है), लेकिन आपके आवेदन में समस्या क्षेत्रों को इंगित करने के लिए या तो पर्याप्त है।

हम इससे विशेष रूप से आश्वस्त नहीं थे, इसलिए मैंने सोचा कि मैं इंटरनेट से पूछूंगा।

उत्तर

1

मिलीसेकंड में समय कई कारकों के आधार पर अलग-अलग होगा - आपकी विकास मशीन में चार प्रोसेसर और 32 जीबी रैम हो सकते हैं - लेकिन उपयोगकर्ता मशीन केवल एकल कोर और 1 जीबी रैम हो सकती है।

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

चाहे कंप्रेसर प्रोसेसर के आधार पर कोड को अनुकूलित कैसे कर सके।

2

असल में, कुछ प्रोफाइलर्स प्रतिशत के अतिरिक्त पूर्ण समय देते हैं।

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

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

बेशक प्रतिशत सही नहीं है, क्योंकि इस बात की कोई गारंटी नहीं है कि परिवर्तन गुणात्मक होंगे (उदाहरण के लिए ओवरहेड, उदाहरण के लिए, additive होगा)।

2

लक्ष्य क्या है?

  1. बस समय माप प्राप्त करने के लिए आप पावरपॉइंट पर डाल सकते हैं? या ...

  2. पूरी बात कैसे लेना है कम समय लेना? (बस इसे एक तेजी से चिप पर चलाने की तुलना में अन्य।)

तो लक्ष्य है (2), तो ऐसा करने के लिए बात सॉफ्टवेयर के भीतर गतिविधियों को खोजने है कि एक) दीवार-घड़ी का एक बड़ा प्रतिशत के लिए खाते समय, और बी) कड़ाई से जरूरी नहीं हैं। कारण यह है कि यदि आप अंश एक्स (50%) समय लेने वाली गतिविधि से छुटकारा पा सकते हैं, तो आपको प्राप्त गतिशील कारक 1/(1-एक्स) या तक दो बार तक है।

मैं यहां "गतिविधि" शब्द का उपयोग करने के लिए सावधान रह रहा हूं, क्योंकि यह एक बहुत ही सामान्य अवधारणा है। यदि आपको लगता है कि आप "धीमी दिनचर्या" की तलाश में हैं, तो आप बड़े गति के अवसरों को याद करने जा रहे हैं, और यही है कि आप करने के लिए बर्दाश्त नहीं कर सकते हैं, यदि आप वास्तव में प्रदर्शन की परवाह करते हैं।

मुख्य बिंदु यह है कि गति के अवसर चट्टानों की तरह हैं। वे गुणकों में और आकारों की एक श्रृंखला में आते हैं। यदि आप को में से प्रत्येक को नहीं हटाते हैं तो आप उन लोगों के साथ रहेंगे जो आपको नहीं मिला था। उदाहरण के लिए, यदि उनमें से तीन हैं, और हटा दिए जाने पर वे 50%, 25%, और 12.5% ​​बचाते हैं, तो यदि आप तीनों करते हैं तो आपको 8x की गति मिलती है। काफी अच्छा। लेकिन, यदि आप उनमें से किसी एक को याद करते हैं, तो आप उसके पास कहीं भी नहीं जाते हैं।

प्रोफाइलर्स को रॉक-फाइंडर माना जाता है, लेकिन यदि वे एक याद करते हैं, तो आप कैसे जान रहे हैं? यदि प्रोफाइलर का आउटपुट प्रभावशाली दिख रहा है, लेकिन ऐसा लगता है कि आप वास्तव में ठीक कर सकते हैं, तो क्या इसका मतलब यह नहीं है कि कोई नहीं है? नहीं। More on all that.

7

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

नमूना प्रोफाइलिंग असल में ऑपरेटिंग सिस्टम समय-समय पर स्टैक चलना होगा। प्रोफाइलिंग रिपोर्ट में आप जो परिणाम देखते हैं, उस समय का प्रतिनिधित्व करता है जब ओएस ने स्टैक पर चलना था कि एक विशेष कार्य स्टैक

इंस्ट्रुमेंटेशन प्रोफाइलिंग हम मूल रूप से बाइनरी (या तो स्थिर या गतिशील रूप से) को संशोधित करते हैं और अवरोध करते हैं कार्यों की शुरुआत और अंत। जब हम कार्य शुरू करते हैं और बाहर निकलते हैं तो हम एक टाइमस्टैम्प लेते हैं। इससे आपको फ़ंक्शन निष्पादन के बारे में सटीक जानकारी मिल जाएगी, लेकिन यह बिना लागत के आती है। चूंकि प्रत्येक फ़ंक्शन पर जानकारी ली जाती है & बाहर निकलें, परिणामी प्रोफाइलिंग रिपोर्ट बहुत बड़ी हो सकती है (प्रोग्राम निष्पादन के कुछ ही सेकंड के साथ 1 जीबी डेटा होने के लिए यह अनजान नहीं है)। इसके अलावा यदि हस्ताक्षरित बाइनरी पर स्थिर उपकरण का उपयोग किया जाता है, तो आपको उन्हें इस्तीफा देना होगा। यह विकास प्रक्रिया को जटिल बना सकता है। गतिशील उपकरण यहां मदद करता है, लेकिन यह आपको डेटा ओवरहेड से नहीं बचाता है। जब तक कि आप विशेष रूप से समय की जानकारी की तलाश नहीं कर रहे हैं नमूना वास्तव में अन्य पोस्टर के रूप में व्यक्त करने का तरीका है।

एफवाईआई विजुअल स्टूडियो स्थिर उपकरण (\ टीम टूल्स \ प्रदर्शन उपकरण में पाया गया) के लिए बनाम के साथ आता है।

+0

व्यायाम प्रोफ़ाइल के रूप में एक जावास्क्रिप्ट विंडोज स्टोर एप्लिकेशन के साथ-साथ सी # एक। आप देखेंगे कि जावास्क्रिप्ट में एमएस जानकारी शामिल है, ऐसा इसलिए है क्योंकि VS2012 में जावास्क्रिप्ट प्रोफाइलिंग उपकरण के माध्यम से किया जाता है, जबकि प्रबंधित विंडोज स्टोर अनुप्रयोग नमूने होते हैं –

0

प्रतिशत अच्छा है। लेकिन मिलीसेकंड में समय की आवश्यकता है। यदि आपको एक ही कार्य करने वाले सॉफ़्टवेयर के दो संस्करणों की तुलना करना है, तो दूसरे को एक से अधिक लंबा लेना होगा। प्रत्येक समारोह में व्यतीत पूर्ण समय की तुलना में प्रतिशत की तुलना करना कठिन होता है। हमें पूर्ण समय के प्रतिशत देखने का विकल्प क्यों नहीं दे रहे हैं?

मुझे आश्चर्य है कि यह पहले से ही नहीं लाया गया है।

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