एक बड़े और जटिल सॉफ्टवेयर उत्पाद को धीमा क्या बनाता है? [बन्द है]


16

एक कारण के लिए जो काफी हद तक अप्रासंगिक है, मैंने इतने लंबे समय में एक बार फिर डेल्फी 7 स्थापित किया। मुझे कहना है, मैं पूरी तरह से उड़ा दिया गया था - एक तरह से मैं थोड़ी देर के लिए नहीं था। यह नहीं है कि मैं चीजों को कैसे याद करता हूं। स्थापना में लगभग 30 सेकंड लगे। इसे लॉन्च करने में 2 सेकंड लगे, और यह तुरंत प्रयोग करने योग्य था। मैं शुरू करने के बाद दूसरा "रन" दबा सकता हूं, और एक सेकंड से भी कम बाद में रिक्त कार्यक्रम पहले से ही दिखाई दे रहा है और चल रहा है। कंप्यूटरों के लिए इतना तेज़ हो रहा हुर्रे!

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

मैं सिस्टम स्टूडियो के विज़ुअल स्टूडियो के साथ काम करने में अनुभवी लोगों से पूछना चाहता हूं: ऐसा क्या है जो उन्हें धीमा बनाता है? क्या यह मानव संयम क्षमताओं के भीतर कोडबेस रखने के लिए आवश्यक अमूर्तता की परतों पर परतें हैं? क्या यह कोड की सरासर राशि है जिसे चलाने की आवश्यकता है? क्या यह घड़ी चक्र / स्मृति उपयोग विभाग में (माइंडबॉगलीली विशाल) व्यय पर प्रोग्रामर-समय-बचत दृष्टिकोणों की दिशा में आधुनिक प्रवृत्ति है?


7
सरल: जैसे-जैसे द्रव्यमान बढ़ता है, जड़ता को दूर करने के लिए अधिक बल की आवश्यकता होती है।
शोग

एक बार किसी ने मुझे प्रबंधक बताया, लेकिन मुझे इस बात पर विश्वास नहीं हुआ।
मिकेल ग्रासमैन

1
यह इस कारण का एक बड़ा हिस्सा है कि मैं अभी भी डेल्फी प्रोग्रामिंग के लिए मुख्य रूप से डी 7 का उपयोग करता हूं।
ग्रैंडमास्टरबी

सबसे तेज़ कोड वह है जो कभी निष्पादित नहीं होता है।
हेनरी

4
@romkyns: मुझे लगता है कि आधुनिक युग में बहुत साफ्टवेयर अक्सर अविश्वसनीय रूप से फूला हुआ, अनावश्यक रूप से बड़ा और अनगढ़ होता है। बहुत सारे सॉफ्टवेयर अब उन्हीं मुद्दों को हल करते हैं जो शक्ति और अंतरिक्ष के एक अंश के साथ दस साल पहले भी हल किए गए थे। क्यों यह अभी भी उतना ही बुरी तरह से पिछड़ता है जितना कभी किया था, यदि ऐसा नहीं है तो? अक्षमता और सूजन।
कक्ष

जवाबों:


20

आर्किटेक्चरल एस्ट्रोनॉटिक्स

विजुअल स्टूडियो 2010 विंडोज प्रेजेंटेशन फाउंडेशन पर बनाया गया है। WPF के लिए बटन वर्ग पर एक नज़र डालें । यह एक बेस क्लास का 9 वां बच्चा है। इसमें गुणों, विधियों और घटनाओं के लगभग 5 पृष्ठ हैं। पर्दे के पीछे एक और पांच पन्नों की शैली की परिभाषाएँ हैं जो अपने सुंदर गोल कोनों और सूक्ष्म एनीमेशन परिवर्तनों का वर्णन करते हैं जब एक माउस कर्सर उस पर चलता है। यह सब उस चीज के लिए है जो मूल रूप से कुछ पाठ या एक चित्र प्रदर्शित करता है और जब वह एक माउस बटन का पता लगाता है तो यह एक क्लिक ईवेंट बनाता है।

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

अब, डेल्फी के साथ इन दो चीजों की तुलना करें। मुझे यकीन है कि आप पाते हैं कि एक डेल्फी बटन में सिर्फ 20 गुण, विधियां और घटनाएं हैं। मैं शर्त लगाता हूं डेल्फी आईडीई केवल एक स्टैक ट्रेस 5-7 स्तर गहरा है। क्योंकि जब कंप्यूटर धीमे थे, तो आप विज़ुअल स्टूडियो 2010 के ओवरहेड को बिना आईडीई के शुरू करने में 40 मिनट तक नहीं ले सकते थे :-)

क्या यह दूसरे से बढ़िया है? खैर, मैं आमतौर पर एक डेल्फी कार्यक्रम बता सकता हूं जब यह लोड होता है क्योंकि यह सपाट दिखता है, रंग म्यूट होते हैं (शायद 8 बिट?)? और कोई सूक्ष्म छायांकन या एनीमेशन नहीं है। मैं इन दिनों सिर्फ 'सस्ता' महसूस करता हूं। सस्ता, लेकिन तेज।

क्या हम बेहतर हैं? दार्शनिकों के लिए यह एक प्रश्न है, कोडर्स नहीं।


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

2
यह एक व्यावहारिक जवाब है; लेकिन मुझे यकीन नहीं है कि यह पूरा हो गया है। विजुअल स्टूडियो 2008 (2010 का पूर्ववर्ती) में कोई WPF नहीं है और अभी भी डेल्फी की तुलना में धीमी दुनिया है। क्या आप अभी भी कॉल स्टैक गहराई और लोड किए गए DLL की संख्या के बारे में एक ही बात कहेंगे?
Timwi

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

@GrandmasterB, मैं डेल्फी का नारा नहीं लगा रहा हूं क्योंकि यह कम मान्यताओं और सरल पुस्तकालयों के साथ आता है। WPF को यह मानते हुए बनाया गया था कि GPU हार्डवेयर त्वरण प्रोग्राम को गहरे रंग, अक्सर एनिमेशन, अल्फा सम्मिश्रण, छाया इत्यादि का उपयोग करने की अनुमति देगा। डेल्फी को उस समय इंजीनियर किया गया था जब ये धारणाएं नहीं बनाई जा सकती थीं। क्या आप डेल्फी में यह सब फिर से लागू कर सकते हैं? निश्चित रूप से, लेकिन आपको WPF बटन के व्यवहार को प्राप्त करने के लिए बहुत सी कोडिंग डालनी होगी। प्लस ओर, डेल्फी बटन सीपीयू, मेमोरी और जीपीयू आवश्यकताओं के साथ नहीं आता है एक WPF बटन या तो @ ओपी का प्रश्न था।
जय बीवर्स

10
सपाट और सादे यूआई के लिए आपका तर्क पूरी तरह से विंडोज 10 के नए 'आधुनिक' यूआई द्वारा अमान्य है। अब हमारे पास 30 साल पहले की तरह फ्लैट, चौकोर, सादे बटन बनाने के लिए ओवरहेड है।
gbjbaanb

11

मैं सिस्टम स्टूडियो के विज़ुअल स्टूडियो के साथ काम करने में अनुभवी लोगों से पूछना चाहता हूं: ऐसा क्या है जो उन्हें धीमा बनाता है? क्या यह मानव संयम क्षमताओं के भीतर कोडबेस रखने के लिए आवश्यक अमूर्तता की परतों पर परतें हैं? क्या यह कोड की सरासर राशि है जिसे चलाने की आवश्यकता है? क्या यह घड़ी चक्र / स्मृति उपयोग विभाग में (माइंडबॉगलीली विशाल) व्यय पर प्रोग्रामर-समय-बचत दृष्टिकोणों की दिशा में आधुनिक प्रवृत्ति है?

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

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

ढीले समन्वय और विरासत

मैंने देखा कि ढीला समन्वय और एक लंबी विरासत बहुत सारे संचित कचरे को जन्म देती है।

उदाहरण के लिए, मुझे इस कोडबेस में लगभग एक सौ त्वरण संरचनाएं मिलीं, उनमें से कई बेमानी हैं।

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

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

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

इस घटना का क्या कारण है? ढीला समन्वय नंबर एक कारण था जो मैंने देखा। टीम के बहुत से सदस्य अक्सर अपने पृथक पारिस्थितिक तंत्र में काम करते हैं, तीसरे पक्ष के डेटा संरचनाओं का विकास या उपयोग करते हैं, लेकिन समान संरचनाओं का उपयोग नहीं करते हुए टीम के अन्य सदस्य उपयोग कर रहे थे, भले ही वे सटीक समान चिंताओं के स्पष्ट रूप से डुप्लिकेट थे।

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

मेमोरी क्षमता

आमतौर पर मेमोरी का उपयोग और गति कम से कम थोक स्तर पर संबंधित होती है। आप अक्सर धीमे सॉफ़्टवेयर को स्पॉट कर सकते हैं कि यह मेमोरी को कैसे बढ़ा रहा है। यह हमेशा सच नहीं है कि अधिक मेमोरी मंदी की ओर ले जाती है, क्योंकि "हॉट" मेमोरी क्या मायने रखती है (किस मेमोरी को हर समय एक्सेस किया जा रहा है - यदि कोई प्रोग्राम मेमोरी के एक बोटलोड का उपयोग करता है, लेकिन केवल 1 मेगाबाइट का उपयोग किया जा रहा है समय है, तो यह इतनी बड़ी डील स्पीड-वार नहीं है)।

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

समाधान

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

लागत

मैं और अधिक विवादास्पद "लागत" पक्ष में डुबकी लगाऊंगा जो मैंने देखा है एक "खर्च" घटना के साथ एक नन्हा सा। यदि कोई भाषा किसी वस्तु के लिए अपरिहार्य मूल्य टैग के साथ आती है (जैसे कि रनटाइम प्रतिबिंब प्रदान करता है और वस्तुओं की एक श्रृंखला के लिए सन्निहित आवंटन को बाध्य नहीं कर सकता है), तो यह मूल्य टैग बहुत दानेदार तत्व के संदर्भ में महंगा है, जैसे कि एकल Pixelया Boolean

फिर भी मैं उन कार्यक्रमों के लिए बहुत सारे स्रोत कोड देखता हूं, जो एक भारी भार को संभालते हैं (उदाहरण: ऐसे हजारों से लाखों Pixelया Booleanउदाहरणों के साथ काम करना ) जो इस तरह के दानेदार स्तर पर उस लागत का भुगतान करते हैं।

ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग एक तरह का एक्सर्पट कर सकती है। फिर भी यह गलती से "ऑब्जेक्ट्स" प्रति se या OOP की लागत नहीं है, यह बस इतना है कि इस तरह के खर्चों को एक किशोरी तत्व के ऐसे दानेदार स्तर पर भुगतान किया जा रहा है जो लाखों लोगों द्वारा तुरंत किया जा रहा है।

तो यह है कि अन्य "लागत" और "खर्च" घटना मैं देख रहा हूँ। लागत पेनीज़ है, लेकिन पेनीज़ जोड़ते हैं अगर हम एक थोक खरीद के लिए निर्माता के साथ बातचीत करने के बजाय व्यक्तिगत रूप से सोडा के एक लाख डिब्बे खरीद रहे हैं।

यहाँ मेरे लिए समाधान "थोक" खरीद है। वस्तुएं उन भाषाओं में भी पूरी तरह से ठीक हैं, जिनमें हर एक को पेनी के कुछ मूल्य टैग हैं बशर्ते कि यह लागत व्यक्तिगत रूप से एक सोडा कैन के समतुल्य समकक्ष के लिए एक लाख बार भुगतान नहीं की जा रही हो।

समय से पहले अनुकूलन

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

यह अंतिम घटना है जिसे मैंने देखा, जहां डेवलपर्स सोडा की एक भी कैन की खरीद पर पेनी को बचाने के लिए पहुंचते हैं, फिर कभी नहीं खरीदा जा सकता है, या इससे भी बदतर, एक घर, अपने सभी समय को बर्बाद कर रहे थे पेनीज़ (या इससे भी बदतर, काल्पनिक पेनीज़ उनके कंपाइलर या हार्डवेयर की वास्तुकला को समझने में असफल) जब अरबों डॉलर व्यर्थ में कहीं और खर्च किए जा रहे थे।

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

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


2
तकनीकी ऋण, दूसरे शब्दों में। तकनीकी ऋण जो कभी नहीं चुकाया जाता है।
रॉबर्ट हार्वे

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

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

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

1
बुरे पुराने दिनों में मैंने अपने एपीआई के एक महत्वपूर्ण टुकड़े के लिए ग्राफिक्स एपीआई और मेमोरी में सीधे एक्सेस पिक्सल को बायपास करने के लिए कुछ कोड लागू किया। अमूर्त और प्रत्यक्ष पहुंच की कई परतों के बीच अंतर 100x जैसा कुछ था, जो उन दिनों एक कंप्यूटर पर मायने रखता था। अब आप कंप्यूटर काफी तेज हैं कि आप किसी भी राशि के अमूर्त माध्यम से नारा लगा सकते हैं, यदि आपके पास है।
माइकल शोप्सिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.