JIT कम्पाइलर संरचनाओं जो एक न्यूनतम सीमा से छोटे हैं कॉपी करने के लिए विशेष-केस कोड पैदा करता है, और कुछ हद तक एक-धीमी सामान्य प्रयोजन बड़ों के लिए का निर्माण। मैं अनुमान लगाता हूं कि जब वह सलाह लिखी गई थी, तो सीमा 16 बाइट थी, लेकिन आज के 32-बिट ढांचे में यह 24 बाइट्स लगता है; यह 64-बिट कोड के लिए बड़ा हो सकता है।
कहा गया है कि, किसी भी आकार वर्ग वस्तु बनाने की लागत एक struct जो एक ही डेटा रखता कॉपी करने की लागत की तुलना में काफी अधिक है। यदि कोड 32 बाइट के लायक फ़ील्ड के साथ क्लास ऑब्जेक्ट बनाता है और फिर उस ऑब्जेक्ट के संदर्भ को 1,000 बार गुजरता है या अन्यथा प्रतिलिपि बनाता है, 1,000 32-बाइट संरचनाओं की प्रतिलिपि बनाने के बजाय 1,000 ऑब्जेक्ट संदर्भों की प्रतिलिपि बनाने से समय बचत की संभावना अधिक होगी कक्षा वस्तु बनाना। यदि, हालांकि, ऑब्जेक्ट इंस्टेंस को केवल दो बार प्रतिलिपि बनाने के बाद छोड़ दिया जाएगा, ऑब्जेक्ट बनाने की लागत शायद 32-बाइट संरचना को दो बार कॉपी करने की लागत के एक बड़े मार्जिन से अधिक हो जाएगी।
भी ध्यान दें कि यह कई मामलों में मूल्य से संरचनाओं के आसपास गुजर या अन्यथा प्रचुरता से, उन्हें कॉपी करने अगर एक प्रयासों ऐसा करने के लिए से बचने के लिए संभव है। एक विधि के लिए ref
पैरामीटर के रूप में संरचना के किसी भी आकार को पास करना, उदाहरण के लिए, केवल एक-मशीन-शब्द (4 या 8 बाइट्स) पते को पारित करने की आवश्यकता होती है। क्योंकि .net में const ref
अवधारणा की किसी भी प्रकार की कमी नहीं है, केवल लिखने योग्य फ़ील्ड या वेरिएबल्स को इस तरह से पारित किया जा सकता है, और System.Array
के अलावा संग्रह - नेटवाइड ref
द्वारा सदस्यों तक पहुंचने का कोई मतलब नहीं है। यदि कोई सरणी या कस्टम संग्रह का उपयोग करने के इच्छुक है, हालांकि, यहां तक कि विशाल (100 बाइट्स या अधिक) संरचनाओं को भी बहुत कुशलता से संसाधित किया जा सकता है। कई मामलों में, एक अपरिवर्तनीय वर्ग के बजाय संरचना का उपयोग करने का प्रदर्शन लाभ encapsulated डेटा के आकार के साथ बढ़ सकता है।
आप क्या मानते हैं कि बनाता है कि ढेर पर अपने डेटा रखने और अधिक कुशल है? ढेर बनाम ढेर में एक कार्यान्वयन विस्तार है।नेट और डेवलपर्स को परवाह नहीं करना चाहिए (देखें http://stackoverflow.com/questions/477101/heap-versus-stack-allocation-implications-net/477333#477333) –
बिना बताए दक्षता के बारे में पूछना कि आप कौन से मीट्रिक का उपयोग कर रहे हैं एक टैड अस्पष्ट यह सबसे कुशल वाहन मांगने जैसा है - यह बताए बिना कि क्या आप अपने यात्रा पर पैसे बचाने की इच्छा रखते हैं, या 30 टन कार्गो परिवहन करने की कोशिश कर रहे हैं। –
Divo आप सिद्धांत में गलत हैं। इस विषय के बाहर मेरा आवेदन बेहतर बनाने के लिए मुझे क्या ख्याल रखना चाहिए। धन्यवाद –