दिलचस्प पोस्ट
Junit4 टेस्ट सूट दो खींचने योग्य डिवाओं के बीच एक रेखा खींचें बूटस्ट्रैप 3 में navbar तत्व के बाहर क्लिक करते समय एक खुला ढंका हुआ नवबार बंद कैसे करें? सामान्य सभी नियंत्रण विधि पृष्ठ छोड़ने से पहले जावास्क्रिप्ट उपयोगकर्ता द्वारा चयनित पाठ से HTML लौटें कैसे CSS3 / जावास्क्रिप्ट के साथ शैली "इनपुट फ़ाइल"? सी-जैसे, कन्स्ट्रक्टर और वर्दी आरम्भिकरण के बीच अंतर क्या हैं? कैसे ठीक से PHP / एचटीएमएल मिश्रित कोड इंडेंट करने के लिए? "बेमेल परिभाषित () मॉड्यूल बेमेल" … "जब मैं परीक्षण चलाने की कोशिश छवियों के साथ Android HTML.fromHTML ()? कैसे iPhone फोटो लाइब्रेरी के लिए तस्वीर को बचाने के लिए? कैसे Django क्वेरी कैश को अक्षम करने के लिए? डॉकरफाइल के साथ निजी जीआईटी रेपो क्लोन करें सी कंपाइलर संरेखण पैडिंग को खत्म करने के लिए संरचना सदस्यों को पुनर्व्यवस्थित क्यों नहीं कर सकता?

कोई एक प्रोफाइलर का उपयोग कर सकता है, लेकिन क्यों न केवल प्रोग्राम को रोकें?

यदि कोई एक एकल धागा प्रोग्राम बना रहा है, तो कहें, जब तक यह चाहिए 10 गुना, आप उस पर एक प्रोफ़ाईल चला सकते हैं आप इसे "रोकें" बटन के साथ भी रोक सकते हैं, और आप देखेंगे कि यह क्या कर रहा है।

यहां तक ​​कि अगर यह केवल 10% धीमी है, यदि आप इसे और अधिक समय से रोकते हैं, तो लंबे समय से पहले आप बार-बार अनावश्यक बात कर देखेंगे। आमतौर पर समस्या स्टैक के मध्य में कहीं फ़ंक्शन कॉल होती है जो वास्तव में जरूरी नहीं होती है। यह समस्या को मापने के लिए नहीं है, लेकिन यह निश्चित रूप से इसे ढूंढता है।

संपादित करें: आपत्तियां ज्यादातर मानते हैं कि आप केवल 1 नमूना लेते हैं। यदि आप गंभीर हैं, तो ले लो 10. किसी भी लाइन की अपशिष्ट के कुछ प्रतिशत के कारण, 40% की तरह, नमूने के उस अंश पर स्टैक पर दिखाई देगा, औसतन। बाटलिनेक्स (सिंगल-थ्रेड कोड में) इससे छिपा नहीं सकते

संपादित करें: मेरा क्या मतलब है यह दिखाने के लिए, कई आपत्तियां फार्म के हैं "पर्याप्त नमूने नहीं हैं, तो आप जो देखते हैं वह पूरी तरह से नकली हो सकता है" – संभावना के बारे में अस्पष्ट विचार। लेकिन यदि किसी भी पहचानने योग्य वर्णन के बारे में कुछ, न केवल नियमित या नियमित सक्रिय होने पर, 30% समय के लिए प्रभावी है, तो किसी भी नमूने पर इसे देखने की संभावना 30% है

फिर मान लें कि केवल 10 नमूनों को लिया जाता है। 10 नमूनों में समस्या की संख्या को द्विपदीय वितरण के बाद देखा जाएगा, और इसे 0 बार देखने की संभावना है .028 यह 1 बार देखने की संभावना है .121 2 बार के लिए, संभावना है .233, और 3 गुना के लिए .267 है, जिसके बाद यह गिर जाता है। चूंकि इसे इसे दो बार से कम देखने की संभावना है .028 + .121 = .139, इसका अर्थ है कि इसे दो या अधिक बार देखने की संभावना 1 – .139 = .861 है। सामान्य नियम यह है कि यदि आप दो या अधिक नमूनों पर कुछ ठीक कर सकते हैं, तो यह फिक्सिंग के लायक है।

इस मामले में, इसे 10 नमूनों में देखने का मौका 86% है। यदि आप 14% में हैं जो इसे नहीं देखते हैं, तो जब तक आप ऐसा नहीं करते तब तक अधिक नमूने लें। (यदि नमूने की संख्या बढ़कर 20 हो गई है, तो इसे देखने का मौका 99% से अधिक तक बढ़ाता है।) तो यह ठीक से मापा नहीं गया है, लेकिन यह ठीक पाया गया है, और यह समझना महत्वपूर्ण है कि यह आसानी से ऐसा कुछ हो सकता है जो एक प्रोफ़ाइलर को वास्तव में नहीं मिल सका, जैसे डेटा की स्थिति से जुड़े कुछ प्रोग्राम प्रोग्राम काउंटर नहीं।

वेब के समाधान से एकत्रित समाधान "कोई एक प्रोफाइलर का उपयोग कर सकता है, लेकिन क्यों न केवल प्रोग्राम को रोकें?"

जावा सर्वरों पर यह हमेशा 2-3 त्वरित Ctrl करने के लिए एक स्वच्छ चाल है – एक पंक्ति में टूटता है और सभी चलने वाले थ्रेड्स के 2-3 थ्रेडडप्स प्राप्त करें। बस जहां सभी थ्रेड्स "हैं" देख सकते हैं कि आपकी प्रदर्शन समस्याएँ कहाँ हैं

यह तकनीक किसी भी अन्य तकनीक की तुलना में 2 मिनट में अधिक प्रदर्शन समस्याओं को प्रकट कर सकती है I

क्योंकि कभी-कभी यह काम करता है, और कभी-कभी यह आपको पूरी तरह से गलत जवाब देता है। एक प्रोफ़फ़ेलर का सही जवाब खोजने का एक बहुत अच्छा रिकॉर्ड है, और यह आमतौर पर तेजी से वहां जाता है।

इसे मैन्युअल रूप से करने से वास्तव में "त्वरित" या "प्रभावी" नहीं कहा जा सकता है, लेकिन कई प्रोफाइल उपकरण हैं जो स्वचालित रूप से ऐसा करते हैं; सांख्यिकीय रूपरेखा के रूप में भी जाना जाता है

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

इसका कारण है कि मैं काम के लिए मैन्युअल नमूनाकरण पर स्वचालित टूल को पसंद करता हूं सांख्यिकीय शक्ति है । दस नमूनों को हाथ से पकड़ना ठीक है जब आपके पास एक फ़ंक्शन 40% रनटाइम लेते हैं, क्योंकि औसतन आपको इसमें चार नमूनें मिलते हैं, और हमेशा कम से कम एक लेकिन सैकड़ों पत्ते कार्यों के साथ, जब आपके पास एक फ्लैट प्रोफ़ाइल हो, तो आपको अधिक नमूनों की आवश्यकता होती है, कोई भी रनटाइम के 1.5% से अधिक नहीं लेता है।

कहो कि आपके पास कई अलग-अलग प्रकार की मछलियों के साथ एक झील है अगर झील में मछली का 40% सैल्मन (और 60% "सब कुछ") है, तो आपको केवल दस मछलियों को पकड़ने की ज़रूरत है कि यह पता है कि झील में बहुत से सामन है लेकिन अगर आपके पास सैकड़ों मछलियों की प्रजातियां हैं, और प्रत्येक प्रजाति 1% से अधिक नहीं है, तो आपको यह कहना है कि "यह झील 0.8% सामन और 0.6% ट्राउट है। । "

इसी प्रकार मैं जिस खेल पर काम करता हूं, वहां कई प्रमुख प्रणालियां हैं, जिनमें से प्रत्येक सैकड़ों विभिन्न संस्थाओं में दर्जनों कार्यों को कॉल करता है, और यह सब एक दूसरे के 60 गुना होता है। इनमें से कुछ फ़ंक्शंस 'सामान्य कार्यों में समय के फ़नल (जैसे malloc ), लेकिन इनमें से अधिकांश नहीं है, और किसी भी मामले में कोई एकल पत्ती नहीं है जो प्रति फ्रेम 1000 μs से अधिक है।

मैं ट्रंक फ़ंक्शंस को देख सकता हूं और देख सकता हूँ, "हम टक्कर में हमारे 10% का समय व्यतीत कर रहे हैं", लेकिन यह बहुत उपयोगी नहीं है: मुझे पता होना चाहिए कि टकराव में, इसलिए मुझे पता है कि किस कार्य को निचोड़ना है बस "कम टक्कर" केवल आपको अभी तक ले जाता है, विशेषकर जब इसका मतलब है कि सुविधाओं को फेंकना। मुझे यह पता चलना चाहिए कि "हम औसत 600 μs / फ्रेम कैप्चर पर ओक्शरी के संकीर्ण चरण में याद करते हैं क्योंकि जादू मिसाइल इतनी तेजी से चलता है और बहुत से कोशिकाओं को छूती है," क्योंकि तब मैं सटीक तय को ट्रैक कर सकता हूं: या तो एक बेहतर पेड़, या धीमी मिसाइलें

मैन्युअल नमूनाकरण ठीक होगा अगर वहाँ 20% बड़ी मात्रा में एकमुश्त, कहते हैं, stricmp , लेकिन हमारे प्रोफाइल के साथ जो मामला नहीं है। इसके बजाय मेरे पास सैकड़ों फ़ंक्शन होते हैं जिनसे मुझे मिलना चाहिए, कहते हैं, फ्रेम का 0.6% फ्रेम के 0.4%। मुझे प्रत्येक 50 μs फ़ंक्शन के 10 μ से दाढ़ी की जरूरत है जिसे 300 बार प्रति सेकेंड कहा जाता है। उस तरह की सटीकता पाने के लिए, मुझे और नमूने चाहिए।

लेकिन दिल में जो ल्यूक स्टैकवाकर करता है वह है जो आप का वर्णन करते हैं: प्रत्येक मिलिसेकंड या तो, यह कार्यक्रम को रोक देता है और कॉलस्टैक (सटीक निर्देश और आईपी की रेखा संख्या सहित) रिकॉर्ड करता है। कुछ प्रोग्रामों को उपयोगी रूप से प्रोफाइल के लिए हजारों नमूनों की आवश्यकता होती है।

(हमने पहले इस बारे में बात की है, निश्चित रूप से, लेकिन मुझे लगा कि यह बहस को संक्षेप करने के लिए एक अच्छी जगह थी।)

प्रोग्रामर वास्तव में जो चीजें हैं, और उन चीजों के बीच अंतर है जो वे दूसरों की सलाह देते हैं

मुझे लगता है कि वास्तव में इस विधि का उपयोग करें कि बहुत सारे प्रोग्रामर (मेरे शामिल है) के बारे में पता है यह केवल वास्तव में प्रदर्शन की समस्याओं के सबसे स्पष्ट खोजने में मदद करता है, लेकिन यह त्वरित और गंदे है और यह काम करता है।

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

तो सिर्फ अदालत में, या "गोटो" कथन में झूठ डिटेक्टरों का उपयोग करने की तरह, हम यह अनुशंसा नहीं करते कि आप ऐसा करते हैं, भले ही उन सभी का उपयोग करें

मुझे दोनों पक्षों के धार्मिक स्वर से हैरान हो रहा है

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

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

यह देखने के लिए लंबे समय तक नहीं लगता है कि क्या स्टैक का शीर्ष डेटाबेस क्लाइंट लायब्रेरी DLL (डेटाबेस पर प्रतीक्षा कर रहा है), या किसी अन्य सिस्टम DLL (सिस्टम ऑपरेशन की प्रतीक्षा कर रहा है) या वास्तव में किसी विधि में स्वयं आवेदन इस मामले में, अगर मुझे सही याद आती है, तो हमने जल्दी ही देखा कि 10 में से 8 बार यह आवेदन एक सिस्टम DLL फ़ाइल कॉल में था जिसे नेटवर्क फ़ाइल पढ़ना या लिखना था। निश्चित रूप से हाल ही में "उन्नयन" ने एक फ़ाइल साझा की प्रदर्शन विशेषताओं को बदल दिया था। एक त्वरित और गंदे बिना और (सिस्टम प्रशासक को स्वीकृत) दृष्टिकोण देखने के लिए दृष्टिकोण क्या उत्पादन में किया गया था, हम समस्या को दूर करने की तुलना में इस मुद्दे को मापने के लिए अधिक समय बिताते।

दूसरी तरफ, जब प्रदर्शन आवश्यकताओं को वास्तव में लिफ़ाफ़ा को धक्का देने के लिए "अच्छा पर्याप्त" से आगे बढ़ना पड़ता है, तो एक प्रोफ़फ़ेलर आवश्यक हो जाता है ताकि आप अपने निकट-बंधे शीर्ष-दस या बीस गर्म स्थान के सभी चक्रों से दाढ़ी का प्रयास कर सकें। यहां तक ​​कि अगर आप सिर्फ एक प्रोजेक्ट को धीमा करने के लिए एक मध्यम प्रदर्शन की ज़रूरतों को पूरा करने की कोशिश कर रहे हैं, तो आप को मापने और परीक्षण करने में मदद करने के लिए सही उपकरण तैयार कर सकते हैं, और यहां तक ​​कि उन्हें अपनी स्वचालित परीक्षण प्रक्रिया में एकीकृत कर सकते हैं यह शानदार तरीके से सहायक हो सकता है।

लेकिन जब शक्ति बाहर निकलती है (और बात करने के लिए) और बैटरी मर गई है, तो यह अच्छा है कि मैन्युअल पेचकश का उपयोग कैसे किया जाए

तो सीधे उत्तर: पता है कि आप कार्यक्रम को रोकने से क्या सीख सकते हैं, लेकिन सटीक उपकरणों से डर नहीं सकते सबसे ज़रूरी बात यह जानती है कि कौन-सी नौकरी कॉल करने वाले उपकरण के लिए कहती हैं

अगर हम सवाल उठाते हैं "यह बेहतर क्यों नहीं है?" तो जवाब व्यक्तिपरक होने जा रहा है संभवत: इसका कारण यह ज्ञात नहीं है कि प्रोफाइलिंग एक मौजूदा समस्या समाधान के बजाय दीर्घकालिक समाधान प्रदान करती है। यह बहु-थ्रेडेड अनुप्रयोगों के लिए प्रभावी नहीं है और यह ऐसे गेम जैसे अनुप्रयोगों के लिए प्रभावी नहीं है जो अपने समय के एक महत्वपूर्ण भाग को खर्च करते हैं।

इसके अलावा, एकल थ्रेडेड अनुप्रयोगों में यदि आपके पास एक ऐसा तरीका है जिसे आप सबसे अधिक रन टाइम का उपभोग करने की उम्मीद करते हैं, और आप अन्य सभी तरीकों के रन-टाइम को कम करना चाहते हैं तो यह निर्धारित करना कठिन होगा कि किन तरीकों से आपके प्रयासों पर ध्यान केंद्रित किया जाएगा पहले पर

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

यदि आपके पास अच्छी तरह से लिखने वाला कोड है तो आप केवल एक विशेष पद्धति से कितने समय तक जांच कर सकते हैं; आप सभी तरीकों को देख सकते हैं

प्रोफ़ाइल के साथ:

  • आप प्रदर्शन सुधार / प्रतिगमन की डिग्री निर्धारित करने के लिए प्रत्येक परिवर्तन के बाद अपने परिदृश्य को फिर से चला सकते हैं।

  • आप यह निर्धारित करने के लिए अलग हार्डवेयर कॉन्फ़िगरेशन पर कोड प्रोफ़ाइल कर सकते हैं कि आपका उत्पादन हार्डवेयर पर्याप्त होने वाला है या नहीं

  • आप जानकारी के प्रभाव को कैसे प्रभावित करते हैं, यह निर्धारित करने के लिए आप लोड के तहत कोड और परीक्षण परीक्षण परिदृश्यों के तहत कोड प्रोफ़ाइल कर सकते हैं

  • आप कनिष्ठ डेवलपर्स के लिए अपने कोड में अपने परिवर्तनों के प्रभावों को कल्पना करने के लिए इसे आसान बना सकते हैं, क्योंकि वे समुद्र तट या पब में बंद होने के दौरान छह माह के समय में या फिर दोनों कोड को फिर से प्रोफ़ाइल कर सकते हैं। बीच-पब, एफटीडब्ल्यू

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

आपका दृष्टिकोण मान्य है और दूसरा आइटम डेवलपर का टूलबॉक्स है। यह केवल रूपरेखा द्वारा अतिप्रभावी हो जाता है

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

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

डिबग मोड में विराम बटन को मारने के कारण, आवेदन व्यवहार की वास्तविक तस्वीर नहीं दे सकती है क्योंकि डीबगर्स अतिरिक्त निष्पादन योग्य कोड का परिचय देते हैं जो आवेदन के कुछ हिस्सों को मंदी बना सकते हैं। डीबगिंग वातावरण में एप्लिकेशन मंदी के संभावित कारणों पर एक माइक स्टॉल के ब्लॉग पोस्ट का उल्लेख कर सकता है कुछ कारणों पर पोस्ट शेड देता है जैसे कि कई ब्रेकपॉइंट, अपवाद ऑब्जेक्ट्स, अपरिवर्तित कोड आदि का निर्माण। अप्रयुक्त कोड के बारे में हिस्सा महत्वपूर्ण है – "डिबग" मोड में बहुत सारे अनुकूलन होंगे (आमतौर पर कोड में अस्तर और पुन: आदेश) खिड़की से बाहर निकाल दिया जा रहा है, डीबग मेजबान (कोड को चलाने की प्रक्रिया) और आईडीई कोड निष्पादन को सिंक्रनाइज़ करने के लिए सक्षम करने के लिए। इसलिए, "डीबग" मोड में दोबारा बार-बार रोकना एक बुरा विचार हो सकता है।

नमूनाकरण प्रोफाइल केवल उपयोगी होते हैं जब

  1. आप थोड़ी सी धागे के साथ एक रनटाइम की निगरानी कर रहे हैं अधिमानतः एक
  2. प्रत्येक धागा पर कॉल स्टैक गहराई अपेक्षाकृत छोटा है (एक नमूना इकट्ठा करने में अविश्वसनीय ओवरहेड को कम करने के लिए)।
  3. आप केवल दीवार घड़ी के समय के बारे में चिंतित हैं, न कि अन्य मीटर या संसाधन बाधाएं
  4. आपने प्रबंधन और निगरानी उद्देश्यों के लिए कोड का उपयोग नहीं किया है (इसलिए स्टैक डंप अनुरोध)
  5. आप गलती से विश्वास करते हैं कि स्टैक फ़्रेम को हटाना एक प्रभावी प्रदर्शन सुधार रणनीति है कि अंतर्निहित लागतें (कोले को छोड़कर) व्यावहारिक रूप से शून्य हैं या नहीं
  6. आपकी नौकरी में दिन-प्रतिदिन सॉफ़्टवेयर निष्पादन इंजीनियरिंग कैसे लागू करें, यह जानने के लिए आपको परेशान नहीं किया जा सकता है
  7. ….

स्टैक ट्रेस स्नैपशॉट्स केवल आपको अपने एप्लिकेशन के स्ट्रोबस्कोपिक एक्स-रे देखने की अनुमति देती हैं। आपको अधिक संचित ज्ञान की आवश्यकता हो सकती है, जो एक प्रोफ़फ़ेलर आपको दे सकता है।

यह चाल आपके उपकरण को अच्छी तरह से जानती है और हाथ में नौकरी के लिए सर्वश्रेष्ठ चुनना है।

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

फिर, गैर तुच्छ कार्यक्रमों के साथ जिस विधि का आप वकालत करते हैं वह बेकार है।

संपादित करें: "क्यों यह बेहतर ज्ञात नहीं है" के बारे में?

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

यह छोटे नमूना सेटों के साथ काफी गलत प्रतीत होता है और बड़े नमूना सेटों को प्राप्त करने में बहुत समय लगेगा, जो अन्य उपयोगी गतिविधियों के साथ बेहतर खर्च होता।

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

प्रोफाइलिंग आपको अधिक समृद्ध और अधिक विस्तृत सटीक रिपोर्ट भी दे सकती है। यह लंबे समय में तेज हो जाएगा

2008/11/25 को संपादित करें: ठीक है, विनीत की प्रतिक्रिया ने आखिरकार मुझे देखा है कि समस्या क्या है यहाँ। देर आए दुरुस्त आए।

किसी भी तरह से यह विचार भूमि में ढीला हो गया है कि प्रदर्शन की समस्याओं को मापने के द्वारा मिलते हैं। यह समाप्त होता है के साथ भ्रामक अर्थ है किसी भी तरह मैं इसे लंबे समय से पूरे कार्यक्रमों को एकमात्र कदम से टाल दिया। मैंने मानव गति को धीमा करने के लिए खुद को झुकाया नहीं। मैं यह देखने की कोशिश कर रहा था कि क्या यह गलत या अनावश्यक बातें कर रहा था। इस तरह से सॉफ्टवेयर को तेजी से बनाने के लिए – अनावश्यक आपरेशनों को ढूंढें और निकालें

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

यह कठिन है इन दिनों, थ्रेडिंग और एसिंक्रनाइज़ेशन के साथ, लेकिन यह कि मैं कैसे सॉफ्टवेयर ट्यून करता हूं – अनावश्यक चक्र ढूंढकर। यह कितनी तेजी से देखकर नहीं – मैं अंत में ऐसा करता हूं।


यहां बताया गया है कि कॉल स्टैक का नमूना गलत उत्तर नहीं दे सकता है, और क्यों नहीं कई नमूनों की आवश्यकता है

ब्याज के अंतराल के दौरान, जब कार्यक्रम आपके इच्छित समय से अधिक समय लेता है, तो कॉल स्टैक निरंतर रहता है, तब भी जब आप इसे नमूना नहीं देते।

  • यदि एक निर्देश मैं उस समय के अंश पी (आई) के लिए कॉल स्टैक पर है, तो प्रोग्राम से इसे हटाकर, यदि आप कर सकते हैं, तो वास्तव में बहुत कुछ बचा लेगा। अगर यह स्पष्ट नहीं है, तो इसे थोड़ा सोचा।

यदि निर्देश एम = 2 या अधिक नमूनों पर दिखाई देता है, तो एन के बाहर, इसकी पी (आई) लगभग एम / एन है, और निश्चित रूप से महत्वपूर्ण है।

एकमात्र तरीका है कि आप निर्देश को देखने में असफल हो सकते हैं, जब कॉल स्टैक पर निर्देश नहीं है, तो आपके सभी नमूनों को जादुई ढंग से समय पर लगाया जा सकता है। साधारण तथ्य यह है कि यह समय के एक अंश के लिए मौजूद है जो इसे आपकी जांच में प्रदर्शित करता है

इसलिए, प्रदर्शन ट्यूनिंग की प्रक्रिया कॉल स्टैक के कई नमूनों को बदलकर अपने सिर को बढ़ाने के लिए निर्देशों (ज्यादातर फ़ंक्शन कॉल निर्देश) को चुनने का एक सरल मामला है। ये जंगल में लंबा पेड़ हैं

ध्यान दें कि हमें कॉल ग्राफ़ के बारे में ध्यान देना नहीं है, या कितनी देर तक कार्य करता है, या कितनी बार उन्हें बुलाया जाता है, या पुनरावर्ती

मैं अस्पष्टता के खिलाफ हूँ, प्रोफेयरर्स के खिलाफ नहीं। They give you lots of statistics, but most don't give P(I), and most users don't realize that that's what matters.

You can talk about forests and trees, but for any performance problem that you can fix by modifying code, you need to modify instructions, specifically instructions with high P(I). So you need to know where those are, preferably without playing Sherlock Holmes. Stack sampling tells you exactly where they are.

This technique is harder to employ in multi-thread, event-driven, or systems in production. That's where profilers, if they would report P(I), could really help.

Stepping through code is great for seeing the nitty-gritty details and troubleshooting algorithms. It's like looking at a tree really up close and following each vein of bark and branch individually.

Profiling lets you see the big picture, and quickly identify trouble points — like taking a step backwards and looking at the whole forest and noticing the tallest trees. By sorting your function calls by length of execution time, you can quickly identify the areas that are the trouble points.

I used this method for Commodore 64 BASIC many years ago. It is surprising how well it works.

I've typically used it on real-time programs that were overrunning their timeslice. You can't manually stop and restart code that has to run 60 times every second.

I've also used it to track down the bottleneck in a compiler I had written. You wouldn't want to try to break such a program manually, because you really have no way of knowing if you are breaking at the spot where the bottlenck is, or just at the spot after the bottleneck when the OS is allowed back in to stop it. Also, what if the major bottleneck is something you can't do anything about, but you'd like to get rid of all the other largeish bottlenecks in the system? How to you prioritize which bottlenecks to attack first, when you don't have good data on where they all are, and what their relative impact each is?

The larger your program gets, the more useful a profiler will be. If you need to optimize a program which contains thousands of conditional branches, a profiler can be indispensible. Feed in your largest sample of test data, and when it's done import the profiling data into Excel. Then you check your assumptions about likely hot spots against the actual data. There are always surprises.