मान लीजिए मैं एक सामान्य एक struct प्रकार के मूल्यों से युक्त सूची की घोषणा:सी # में, सूची <struct> बॉक्स में मूल्य हैं?
struct MyStruct {
public MyStruct(int val1, decimal val2) : this() {
Val1 = val1;
Val2 = val2;
}
public int Val1 {get; private set;}
public decimal Val2 {get; private set;}
}
List<MyStruct> list;
करता सूची <> दुकान एक बॉक्स्ड struct के रूप में प्रत्येक व्यक्ति के मूल्य, ढेर पर व्यक्तिगत रूप से आवंटित? या यह उससे ज्यादा चालाक है?
क्या करता है "और 500 सूची तत्वों के बाद स्मृति को सहेजा गया है, मुक्केबाजी सूची तत्व वर्ग कार्यान्वयन उत्पन्न करने के लिए उपयोग की जाने वाली स्मृति से अधिक नहीं है" मतलब? क्या यह किसी तरह का नुकसान है? –
@ मार्सनमाओ कोई नुकसान नहीं है। दूसरे शब्दों में रखो, इसका मतलब है कि यदि कोई सूची बेवकूफ थी और उसने बॉक्स स्ट्रक्चर किया था, तो सूची द्वारा उपयोग की जाने वाली स्मृति लगभग 500 तत्वों पर दोगुनी हो जाएगी। चूंकि, यह बॉक्स स्ट्रक्चर नहीं करता है, तो 500 तत्वों द्वारा उपयोग की जाने वाली मेमोरी की तुलना में काफी कम होगी। –
@ सी में मार्सन माओ जेनेरिक सी ++ की तरह नहीं हैं, वे हमेशा प्रत्येक अद्वितीय प्रकार के लिए कोड उत्पन्न नहीं करते हैं। संदर्भ प्रकारों के लिए वे एक ही अंतर्निहित कोड का उपयोग करेंगे क्योंकि सूचक के आकार संदर्भ के प्रकार के साथ नहीं बदलते हैं। लेकिन मूल्य प्रकारों के लिए आकार बदलता है इसलिए सूची का एक संस्करण विशिष्ट रूप से जेनरेट किया जाना चाहिए, इसकी स्मृति लागत है क्योंकि इसका मतलब है कि अब सूची कोड की एक और प्रति है। क्षमा करें अगर मैं स्पष्ट नहीं हूं। Https://msdn.microsoft.com/en-us/library/f4a6ta2h.aspx –