गुजर in
संदर्भ तार्किक मान द्वारा पारित करने के लिए बराबर है।
सही बात।
क्या प्रदर्शन लाभ का कुछ प्रकार है?
हाँ।
यह मेरा विश्वास था कि चीजों के पीछे-छोर पर, एक ref
पैरामीटर को कम से कम चर के भौतिक पते की प्रतिलिपि बनाना चाहिए, जो कि किसी भी विशिष्ट वस्तु संदर्भ के समान आकार होना चाहिए।
कोई आवश्यकता नहीं है कि एक वस्तु का संदर्भ और एक चर का संदर्भ दोनों एक ही आकार के हों, और एक आवश्यकता नहीं है कि या तो एक मशीन शब्द का आकार है, लेकिन हां, व्यवहार में दोनों 32 पर 32 बिट्स हैं 64 बिट मशीनों पर बिट मशीनें और 64 बिट्स।
आपको लगता है कि "भौतिक पता" के साथ क्या करना है यह मेरे लिए अस्पष्ट है। विंडोज पर हम वर्चुअल एड्रेस का उपयोग करते हैं , उपयोगकर्ता मोड कोड में भौतिक पते का नहीं । किन संभावित परिस्थितियों में आप कल्पना करेंगे कि C # कार्यक्रम में एक भौतिक पता सार्थक है, मुझे यह जानने की उत्सुकता है।
यह भी आवश्यकता नहीं है कि भंडारण के आभासी पते के रूप में किसी भी प्रकार का संदर्भ लागू किया जाए। संदर्भ सीएलआई विनिर्देश के अनुरूप कार्यान्वयन में जीसी तालिकाओं में अपारदर्शी हैंडल हो सकते हैं।
सिर्फ बड़े स्ट्रक्चर में फायदा है?
बड़ी संरचनाओं को पारित करने की लागत कम करना सुविधा के लिए प्रेरक परिदृश्य है ।
ध्यान दें कि कोई भी गारंटी नहीं है in
जो किसी भी कार्यक्रम को वास्तव में तेज बनाता है, और यह कार्यक्रमों को धीमा कर सकता है। अनुभवजन्य शोध द्वारा प्रदर्शन के बारे में सभी सवालों का जवाब दिया जाना चाहिए । बहुत कम अनुकूलन हैं जो हमेशा जीतते हैं ; यह "हमेशा जीत" अनुकूलन नहीं है।
क्या कुछ पीछे-पीछे कंपाइलर ऑप्टिमाइज़ेशन है जो इसे कहीं और आकर्षक बनाता है?
कंपाइलर और रनटाइम को किसी भी अनुकूलन को बनाने की अनुमति है यदि वे ऐसा करते हैं तो सी # विनिर्देश के नियमों का उल्लंघन नहीं करते हैं। मेरी जानकारी में in
मापदंडों के लिए अभी तक ऐसा अनुकूलन नहीं है , लेकिन यह भविष्य में इस तरह के अनुकूलन को रोकता नहीं है।
मुझे हर पैरामीटर को एक क्यों नहीं बनाना चाहिए?
ठीक है, मान लीजिए कि आपने एक int
पैरामीटर के बजाय एक in int
पैरामीटर बनाया है। क्या लागत लगाई जाती है?
- कॉल साइट को अब एक मान के बजाय एक चर की आवश्यकता होती है
- चर को अपंजीकृत नहीं किया जा सकता है। घबराने की सावधानी से किए गए रजिस्टर आवंटन योजना में सिर्फ एक रिंच मिला है।
- कॉल साइट पर कोड बड़ा है, क्योंकि इसे वेरिएबल पर रेफरी लेना चाहिए और इसे स्टैक पर रखना चाहिए, जबकि इससे पहले कि यह कॉल स्टैक पर मूल्य को धक्का दे सकता है
- बड़ा कोड का मतलब है कि कुछ छोटे कूद निर्देश अब लंबी कूद निर्देश बन सकते हैं, इसलिए, अब कोड बड़ा हो गया है। इससे सभी तरह की चीजों पर असर पड़ता है। कैश जल्दी भर जाता है, घबराने के लिए अधिक काम करना पड़ता है, घबराना बड़े कोड आकारों पर कुछ अनुकूलन नहीं करने का विकल्प चुन सकता है, और इसी तरह।
- कैली साइट पर, हमने स्टैक (या रजिस्टर) पर एक मान को एक सूचक में अप्रत्यक्ष रूप से एक्सेस किया है। अब, वह पॉइंटर कैश में होने की अत्यधिक संभावना है, लेकिन फिर भी, हमने अब टू-इंस्ट्रक्शन एक्सेस में वैल्यू के लिए वन-इंस्ट्रक्शन एक्सेस को बदल दिया है।
- और इसी तरह।
मान लीजिए कि यह एक है double
और आप इसे ए में बदलते हैं in double
। फिर, अब चर को उच्च-प्रदर्शन फ्लोटिंग पॉइंट रजिस्टर में नहीं देखा जा सकता है। यह न केवल प्रदर्शन के निहितार्थ है, यह कार्यक्रम के व्यवहार को भी बदल सकता है! सी # को उच्च-से-64-बिट सटीकता में फ्लोटिंग अंकगणित करने की अनुमति है और आमतौर पर ऐसा तभी होता है जब फ्लोट्स की गणना की जा सकती है।
यह एक मुफ्त अनुकूलन नहीं है। आपको विकल्प के खिलाफ इसके प्रदर्शन को मापना होगा। आपका सबसे अच्छा शर्त यह है कि आप पहले स्थान पर बड़ी संरचना न बनाएं, जैसा कि डिजाइन दिशानिर्देशों का सुझाव है।
ref
पारित करने के लिए प्रयोग किया जाता है structs उन्हें कॉपी करने के बजाय संदर्भ द्वारा।in
इसका मतलब है कि संरचना को संशोधित नहीं किया जाना चाहिए।