यदि मैं इंटरफ़ेस संदर्भों के साथ अपने डेल्फी प्रोग्राम में सभी ऑब्जेक्ट संदर्भों को प्रतिस्थापित करता हूं, और उन वस्तुओं का उपयोग करता हूं जो TInterfacedObject से विरासत में प्राप्त होते हैं, तो परिणामस्वरूप एप्लिकेशन पहले की गति के साथ चलेंगे? या संदर्भ गणना गिनती रन पर एक महत्वपूर्ण निष्पादन ओवरहेड जोड़ता है?डेल्फी में निष्पादन गति पर इंटरफेस का कौन सा प्रभाव पड़ता है?
उत्तर
संदर्भ गणना आपको प्रभावित कर सकती है यदि आप उन इंटरफेस के बहुत से असाइनमेंट करते हैं (या उन्हें फ़ंक्शन कॉल में गैर-कॉन्स्ट, गैर-चर पैरामीटर के रूप में पास करते हैं)।
हालांकि वास्तविक समस्या अक्सर संदर्भ गिनती नहीं है, लेकिन निहित प्रयास अंततः संदर्भ गणना की रक्षा के लिए कंपाइलर जोड़ता है, जो आपके कॉल ओवरहेड को जोड़ देगा, और यदि आपके पास सबसे दर्दनाक हो तो कई सरल तरीकों (बनाम आपके सभी कोड के साथ एक बड़ी प्रक्रिया बनाम, जिसे आप वास्तव में नहीं चाहते हैं)।
उस पहलू को कम करने के लिए, हमेशा इंटरफेस को या तो कॉन्स्ट या var पैरामीटर के रूप में पास करें, फ़ंक्शन कॉल परिणाम के रूप में इंटरफेस लौटने से बचें, और इंटरफ़ेस प्रकार के स्थानीय चर के उपयोग को कम करें, कॉन्स पैरामीटर और प्रत्यक्ष ऑब्जेक्ट फ़ील्ड उपयोगों को प्राथमिकता दें।
इंटरफेस्ड कक्षाएं आपके द्वारा बनाए, पास और नष्ट होने वाले प्रत्येक उदाहरण की संदर्भ गणना को बढ़ाने और रिलीज़ करने का ओवरहेड लेती हैं, लेकिन जब तक आप तंग लूप में संदर्भ बनाते, नष्ट नहीं कर रहे हैं, तो आपको किसी भी महत्वपूर्ण धीमी गति का अनुभव नहीं करना चाहिए ।
आप निश्चित रूप से लौटने -1 _AddRef में से इस तरह के रूप संदर्भ गिनती निष्क्रिय कर सकते हैं और _Release ओवरराइड करता है, लेकिन वह उन कॉल जनरेट करने से संकलक नहीं रोकता है ...
इतना ही नहीं संदर्भ गिनती - बस बुला इंटरफ़ेस संदर्भ के माध्यम से ऑब्जेक्ट की विधियां हमेशा ओवरहेड का तात्पर्य है। Here आप पढ़ सकते हैं कि डेल्फी में इंटरफ़ेस संदर्भ के माध्यम से ऑब्जेक्ट की विधियों को कैसे कॉल किया जाता है।
- 1. आयात कथन अनुक्रम का कोई प्रभाव पड़ता है?
- 2. होल्डॉक पर यूपीडॉक पर क्या प्रभाव पड़ता है?
- 3. बाहरी "सी" का सी में कोई प्रभाव पड़ता है?
- 4. कौन सा protobuf अनुकूलन?
- 5. सबसे तेज़ जावास्क्रिप्ट इंजन कौन सा है, और क्या इससे वास्तव में कोई फर्क पड़ता है?
- 6. क्या jQuery में बांधने के बजाय लाइव का उपयोग करने में कोई प्रदर्शन प्रभाव पड़ता है?
- 7. क्या कक्षा में [Serializable] जोड़ना कोई प्रदर्शन प्रभाव पड़ता है?
- 8. PHP में बेहतर प्रदर्शन कौन सा है?
- 9. जेपीए इंटरफेस का समर्थन नहीं करता .. प्रभाव?
- 10. कौन सा बेहतर है?
- 11. जावास्क्रिप्ट में, रनटाइम पर कौन सा कोड निष्पादित होता है और कौन सा कोड पार्सटाइम पर निष्पादित करता है?
- 12. कौन सा डेल्फी तकनीक उपयोग करने के लिए?
- 13. x86 पर कौन सा पता निष्पादित करना शुरू करता है?
- 14. एएसपी.नेट एमवीसी 3: रूटएक्सस्टिंगफाइल = सच का कोई प्रभाव नहीं पड़ता
- 15. कौन सा एसटीएल कंटेनर std :: sort के लिए सबसे अच्छा है? (क्या इससे कोई फर्क पड़ता है?)
- 16. HTTP हस्तांतरण के लिए फ़ाइलों पर gzip का गति प्रभाव क्या है?
- 17. सार बनाम इंटरफेस - डेल्फी
- 18. क्या KEY_WOW64_64KEY का 32 बिट विंडोज पर कोई प्रभाव पड़ता है?
- 19. ऑब्जेक्ट कॉन्टेक्स्ट पर अलग-अलग ईएफ 4 सेवऑप्शन का क्या प्रभाव पड़ता है?
- 20. एक नियंत्रक कौन सा है और स्प्रिंग एमवीसी में हैंडलर मैपिंग कौन सा है?
- 21. एंड्रॉइड ब्लरमास्कफिल्टर का कैनवास.drawOval में कोई प्रभाव नहीं पड़ता है जबकि पाठ धुंधला हुआ है
- 22. जे 2 ईई सर्वर से COM इंटरफेस तक पहुंचने का सबसे अच्छा तरीका कौन सा है?
- 23. प्वाइंटर और निष्पादन की गति
- 24. पीएमडी में सर्वोच्च प्राथमिकता कौन सा है?
- 25. मूल निष्पादन योग्य का कौन सा हिस्सा (विशेष रूप से) इसे गैर पोर्टेबल बनाता है?
- 26. कौन सा ऑपरेटर हटाता है?
- 27. यह कौन सा डिजाइन पैटर्न है?
- 28. किसी वर्ग की वस्तुओं के सदस्यों के आदेश पर प्रदर्शन पर कोई प्रभाव पड़ता है?
- 29. लूप में पसंदीदा स्थिति कौन सा है?
- 30. SQL सर्वर डेटाबेस में सबसे आम आईडी प्रकार कौन सा है, और कौन सा बेहतर है?
तो (इंटरफेस में उपयोग के अलावा) 'अंत में प्रयास करें' ब्लॉक का गति पर भी महत्वपूर्ण प्रभाव पड़ता है, भले ही कोई अपवाद न हो? – mjn
हाँ, यह कर सकते हैं, विशेष रूप से सरल प्रक्रियाओं में, क्योंकि एक कोशिश अंत में काफी (ASM स्तर पर) कोड का हिस्सा दर्शाता है, और यह भी सबसे कारगर प्रवेश और निकास कोड जनरेट से संकलक से बचाता है। उदाहरण के लिए इस जाँच, यह एक अंतर्निहित कोशिश अंत में की रक्षा करने कोड है कि निष्पादित नहीं किया गया है की एक बात है, क्योंकि निहित कोशिश अंत में प्रक्रिया वे में, और कोड के लिए नहीं कर रहे हैं करने के लिए संकलक से जुड़े होते हैं कि असफल हो सकता है । तो आप प्रक्रिया कॉल में इसके लिए भुगतान करते हैं, भले ही आप उस कोड को निष्पादित न करें जो असफल हो। http://delphitools.info/2009/05/06/code-optimization-go-for-the-jugular/ –
मैंने अभी आपका जवाब फिर से पढ़ा है - 'फंक्शन कॉल परिणाम के रूप में इंटरफेस लौटने से बचने' के बारे में एक प्रश्न, क्या यह करता है इसका मतलब है कि उदाहरण के लिए एक फैक्ट्री फ़ंक्शन को इंटरफ़ेस संदर्भों द्वारा कक्षाएं वापस नहीं करनी चाहिए लेकिन कक्षा के उदाहरण? तो 'TSomeFactory.CreateX' में' TMyIplementmentOfX' होना चाहिए और इंटरफ़ेस 'IX' रिटर्न प्रकार के रूप में नहीं होना चाहिए? – mjn