ऐसा लगता है कि सवाल मूल रूप से है "क्या सी # कंपाइलर समर्थन named return value optimization (एनआरवीओ) है?"
यह एक उचित सवाल है, मुझे लगता है, लेकिन delnan points out की तरह, यह विशेष रूप से प्रासंगिक नहीं है क्योंकि सी # में स्ट्रिंग संदर्भ प्रकार हैं। यदि आप एक सी ++ प्रोग्रामर हैं, तो आप संदर्भ प्रकारों के बारे में सोच सकते हैं जो अनिवार्य रूप से पॉइंटर्स के बराबर हैं। तो यद्यपि आप मूल्य से स्ट्रिंग को वापस कर रहे हैं, आप वास्तव में केवल संदर्भ पर मूल्य के आधार पर लौट रहे हैं, ऑब्जेक्ट स्वयं ही नहीं। ऐसा लगता है कि आप मूल्य के आधार पर सूचक पते लौट रहे थे। पूरे स्ट्रिंग ऑब्जेक्ट की एक प्रति नहीं बनाई जानी चाहिए, इसलिए ऑप्टिमाइज़ेशन आपको बहुत कम लाभ देता है। एनआरवीओ की आवश्यकता होने का एकमात्र कारण यह है कि एक बड़ी और महंगी प्रतिलिपि के प्रदर्शन हिट से पीड़ित होने से बचें, लेकिन एक सूचक/संदर्भ की प्रतिलिपि महंगा नहीं है।
हालांकि, यदि आपने एक अलग उदाहरण दिया है जो एक संदर्भ प्रकार (उदाहरण के लिए, एक बड़ी संरचना) के बजाय मूल्य प्रकार का उपयोग करता है, तो एनआरवीओ लागू करके प्राप्त करने के लिए एक महत्वपूर्ण प्रदर्शन सुधार हो सकता है। दुर्भाग्यवश, यहां तक कि इस मामले में, मुझे विश्वास नहीं है कि सी # कंपाइलर यह करता है। मुझे लगता है कि जेआईटीर हो सकता है; मैं निश्चित रूप से नहीं कह सकता। (और यदि यह अब नहीं किया गया है, तो इसे हमेशा भविष्य के संस्करणों में जोड़ा जा सकता है। हालांकि ऐसी बड़ी संरचनाएं शायद ही कभी सी # कोड में पाई जाती हैं, इसलिए यह संभव नहीं है कि यह प्रदर्शन टीम की लक्ष्यों की सूची के शीर्ष पर है।)
अधिक जानकारी के लिए, सी # में References and Values पर जॉन स्कीट का लेख पढ़ने की अनुशंसा की जाती है।
स्रोत
2013-06-11 13:47:44
इससे कोई फर्क क्यों पड़ता है? 'स्ट्रिंग' एक संदर्भ प्रकार है, इसलिए यदि इसे अनुकूलित नहीं किया गया था तो यह दो अतिरिक्त शब्द-आकार की प्रतियां सबसे खराब होगी। वह मूंगफली है। – delnan
इससे कोई फर्क नहीं पड़ता, यह ओ (1) समय अंतर पहला सामान्य रूप से अधिक पठनीय है, इसलिए इसका उपयोग करें। जब दूसरा दूसरा पठनीय है, तो उस –