आप कहां अनुकूलन करते हैं?


9

संभवतः गति के लिए अनुकूलित करने के लिए दो क्षेत्र हैं:

  • जहां सबसे ज्यादा समय बिताया जाता है
  • वह कोड जिसे सबसे अधिक कहा जाता है

अनुकूलन शुरू करने के लिए सबसे अच्छी जगह कौन सी है?

अक्सर कोड जिसे सबसे अधिक बार कहा जाता है, पहले से ही कम निष्पादन समय होता है। क्या आप धीमे, कम बुलाए गए क्षेत्रों का अनुकूलन करते हैं या तेज, भारी उपयोग किए गए क्षेत्रों का अनुकूलन करने में समय व्यतीत करते हैं?


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

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

न तो। उस कोड की तलाश करें जो उस समय के बड़े हिस्से के ढेर पर हो।
माइक डनलैवी

जवाबों:


4

आपको समय की 95% छोटी क्षमताओं को अनदेखा करना चाहिए। पहले, इसे सही ढंग से काम करें , फिर विश्लेषण करें ...

आपका डिज़ाइन

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

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

जब आपका डिजाइन सही लगता है, तो आप ...

निम्न स्तर का तर्क।

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

इस बिंदु पर, प्रोफ़ाइल और उस स्थान को ढूंढें जहां कार्यक्रम का अधिकांश समय बिताया जाता है, और इसे खत्म करने का एक तरीका ढूंढें।


मैं जिस प्रोग्राम पर काम कर रहा हूं वह सही है। हम इसे तेजी से बनाना चाहते हैं यदि हम कर सकते हैं, क्योंकि यह एक webservice है जिसे चलाने के लिए 30s से एक मिनट तक का समय लग सकता है।
माइकल के

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

1
हमारे पास प्रोफाइलिंग टूल है। मैं अभी भी इसे सीख रहा हूं और जानकारी के साथ क्या करना है। यह मेरे लिए अपेक्षाकृत नया विषय है, और बहुत दिलचस्प है।
माइकल के

@ माइकल: अच्छा! आप (उम्मीद है) अपने तरीके से शानदार प्रदर्शन ट्यूनिंग पर हैं! :)
FrustratedWithFormsDesigner

+1: यह मैं जो कहने जा रहा था, लेकिन बहुत अधिक स्पष्ट रूप से।
डोमिनिक मैकडोनेल

3

सबसे पहले, यह पता लगाने के लिए कि आपका कोड अपना समय कहां खर्च कर रहा है, एक प्रोफाइलर चलाएं।

फिर, उन स्थानों को देखें जिन्हें देखने के लिए अनुकूलन करना आसान है।

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

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

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

जोड़ने के लिए संपादित: चूंकि आपके पास विशिष्ट कार्यक्षमता है जो एक लंबा समय ले रही है, इसलिए उपरोक्त चरणों को केवल उस विशिष्ट फ़ंक्शन को 10 या इतने बार चलाने की कोशिश करें।


2

य़ह कहना कठिन है। यह वास्तव में इस बात पर निर्भर करता है कि tha कोड क्या कर रहा है। एक प्रदर्शन परीक्षण चलाएं, एक प्रदर्शन प्रोफ़ाइल प्राप्त करें, और देखें और देखें कि विभिन्न क्षेत्रों में वास्तविक समय कितना खर्च होता है। आपके सामान्यीकरण हैं ... सामान्यीकरण और यह परियोजना से परियोजना में भिन्न होता है।

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

मैं आमतौर पर इस तरह की चीज के बारे में चिंता नहीं करता हूं (जब तक मुझे प्रदर्शन ट्यूनिंग करने की आवश्यकता नहीं होती है) जब तक मुझे कुछ विचार नहीं होता कि समय से पहले क्या होने जा रहा है।


1

अच्छी तरह से "हम" आमतौर पर अनुकूलन नहीं करते हैं जब तक कि अनुकूलन के लिए एक स्पष्ट आवश्यकता नहीं होती है जब कुछ अस्वीकार्य रूप से धीमा होता है।

और जब इसकी आवश्यकता स्वयं प्रकट होती है तो यह आमतौर पर इसके अच्छे संकेतों के साथ होता है कि अनुकूलन के लिए वास्तव में क्या कहता है।

तो उत्तर सामान्य है: "यह निर्भर करता है।"


1

आपको एक मुट्ठी भर ठेठ रनों का उपयोग करना चाहिए और कोड के प्रत्येक भाग में कुल समय व्यतीत करने पर ध्यान देना चाहिए, फिर चाहे आप वहां कितने भी समय या कितने समय तक रहे हों। इन भागों का अनुकूलन हमेशा एक गति वृद्धि देना चाहिए।

आपकी कार्यान्वयन भाषा कितनी निम्न स्तर की है, इसके आधार पर आपको यह भी पता लगाना चाहिए कि अधिकांश कैश मिस होने के क्या कारण हैं। कॉलिंग कोड को समेकित करने से यहां मदद मिलेगी।


1

समस्या वाक्यांश है "जहां सबसे अधिक समय बिताया जाता है" अस्पष्ट है।

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

यदि इसका अर्थ है "जहां प्रोग्रामर के कोड में निष्पादित विवरण हैं जो समय के एक बड़े अंश का उपभोग करते हैं" जो कि अधिक उपयोगी अवधारणा है।

"कोड जिसे सबसे अधिक कहा जाता है" की अवधारणा के साथ समस्या यह है कि समय की मात्रा कितनी होती है, इसका उत्पाद है कि इसे कितनी बार कहा जाता है और कितना समय लगता है प्रति कॉल (बछड़ों और I / O सहित)। चूँकि इसमें लगने वाले समय की मात्रा परिमाण के कई आदेशों पर अलग-अलग हो सकती है, इसे कहा जाने वाला समय आपको यह नहीं बताता है कि समस्या कितनी है। फंक्शन A को 10 बार और 0.1 सेकंड में बुलाया जा सकता है, जबकि फ़ंक्शन B को 1000 बार और माइक्रोसेकंड कहा जा सकता है।

एक चीज जो आपको बताएगी कि यह कहां दिखना है: जब भी कोड की एक पंक्ति खर्च करने का समय हो रहा है तो यह स्टैक पर है । इसलिए, उदाहरण के लिए, यदि कोड की एक रेखा एक गर्म स्थान है, या यदि यह एक पुस्तकालय समारोह के लिए एक कॉल है, या यदि यह 30-स्तरीय कॉल ट्री में 20 वीं कॉल है, तो यह 20% समय के लिए जिम्मेदार है। , तो यह समय के 20% के ढेर पर है। स्टैक के रैंडम-टाइम नमूनों में प्रत्येक को प्रदर्शित करने का 20% मौका होगा। क्या अधिक है, अगर नमूने I / O के दौरान लिए जा सकते हैं, तो वे आपको दिखाएंगे कि I / O के लिए क्या खाते हैं, जो व्यर्थ सीपीयू चक्र के रूप में या अधिक बेकार हो सकते हैं।

और यह पूरी तरह से स्वतंत्र है कि इसे कितनी बार लागू किया जाता है।


'प्रतिदिन प्रोग्रामर को कभी स्पर्श नहीं करना चाहिए' से क्या आपका मतलब स्पर्श करने की संभावना नहीं है? इसके अलावा, स्टैक का नमूना एक व्यावहारिक रूपरेखा विधि है?
माइकल के

@ मिचेल: हाँ, स्टैक का नमूना लेना एक ऐसी विधि है जो आधुनिक प्रोफाइलर ज़ूम पर आधारित है । इसके अलावा, पूरी तरह से मैनुअल आश्चर्यजनक रूप से अच्छी तरह से काम करता है
माइक डनलवे

बहुत ही रोचक। मुझे अभी कुछ अध्ययन करने को मिला है!
माइकल के

@ मिचेल: यह संयुक्त जिम्मेदारी की कानूनी अवधारणा की तरह है। एक समय में, एक निर्देश में पीसी के लिए जिम्मेदारी न केवल उस निर्देश की संयुक्त जिम्मेदारी है, बल्कि इसके ऊपर प्रत्येक कॉल स्टैक पर है। उनमें से किसी एक को खत्म करने से यह उस विशेष स्थिति में आने से बच जाएगा।
माइक डनलवे

0

ऑप्टिमाइज़ करें जहां सबसे अधिक समय बिताया जाता है जब तक कि कोई विशेष कारण न हो (यानी अधिकांश समय अतुल्यकालिक प्रसंस्करण करने में बिताया जाता है कि मनुष्य वास्तव में परवाह नहीं करता है कि यह 5 मिनट या 10 मिनट में समाप्त होता है)। कोड जिसे सबसे अधिक कहा जाता है, स्वाभाविक रूप से, कुल बीता समय के अपेक्षाकृत बड़े हिस्से को रैक करने की प्रवृत्ति होगी, क्योंकि जब आप इसे हजारों बार करते हैं तब भी लघु निष्पादन समय जुड़ जाता है।


0

आपको उस कोड पर काम करना होगा जो सबसे अधिक समय ले रहा है। सुधार कोड जो केवल रन समय के कुछ प्रतिशत के लिए खाता है, केवल आपको एक छोटा सुधार दे सकता है।

क्या आपने माप लिया है ताकि आपको पता हो कि कौन सा कोड सबसे अधिक समय ले रहा है?


0

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

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

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


0

यदि आप अपने अनुकूलन प्रयास पर वापसी चाहते हैं तो आपको उस कोड को देखना होगा जो सबसे अधिक समय लेता है। मेरा सामान्य लक्ष्य कुछ ऐसा है जो कम से कम 80% समय लेता है। मैं आम तौर पर 10 गुना प्रदर्शन लाभ का लक्ष्य रखता हूं। कभी-कभी उस कोड को डिज़ाइन करने के तरीके में एक बड़े बदलाव की आवश्यकता होती है। इस तरह के बदलाव से आपको कुछ ऐसा मिलता है जो लगभग चार गुना तेजी से चलता है।

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

पहले से तेज़ एप्लिकेशन को ऑप्टिमाइज़ करना एक मूर्खतापूर्ण कार्य हो सकता है। मैं अभी भी सबसे अधिक समय लेने वाले क्षेत्र को लक्षित करूंगा। यदि आप तुरंत वापस लौटने के लिए 10% समय का उपयोग करके कुछ ले सकते हैं, तो भी आपको 90% समय की आवश्यकता होगी। आपने जल्दी से कम रिटर्न के नियम को मारा।

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


0

आमतौर पर यह ज्यादातर मामलों में मांसाहारी कार्य होता है, न कि उन कार्यों को जिन्हें अक्सर एक बिलियन बार एक लूप में कहा जाता है।

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

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

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

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

आपको अपने उपयोगकर्ताओं के हितों के साथ गठबंधन किए गए वास्तविक उपयोग के मामलों को अनुकूलित करना होगा या फिर यह बेकार से भी बदतर है, क्योंकि उन सभी अनुकूलन जो कम से कम कुछ हद तक कोड की स्थिरता को कम करते हैं, उनमें उपयोगकर्ता को बहुत कम लाभ होता है और कोडबेस के लिए केवल उन सभी नकारात्मक।

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