से बहुत दूर है मेरे पास List<Matrix4>
है, जहां Matrix4
एक संरचना है जिसमें 16 फ्लोट हैं, इसलिए यह 16 * 4 बाइट्स = 64 बाइट्स का उपयोग करता है।सी # सूची <T> मेमोरी अपवाद से बाहर है लेकिन 2 जीबी सीमा
जब मैं सूची में आइटम जोड़ना शुरू करता हूं तो यह 1 मिलियन लाइन पार करते समय आउट ऑफ़ मेमोरी अपवाद फेंकता है।
मुझे पता है कि .NET ऑब्जेक्ट प्रति 2GB की सीमा होती है, लेकिन जब तक मैं पूरी तरह से मेरे मन की बाहर हूँ:
1.000.000 * 64 बाइट्स = ~ 61mb
कौन सा भी पास नहीं है सीमा तक।
जब मैं सूची प्रबंधक के अनुसार सूची को पॉप्युलेट करना शुरू करता हूं, तो मेरा एप्लिकेशन 896 एमबी का उपयोग कर रहा है और जब तक मैं अपवाद तक पहुंचता हूं तो यह 1028 एमबी का उपयोग कर रहा है।
कंप्यूटर में 8 जीबी की भौतिक मेमोरी है लेकिन यह केवल 6 जीबी का उपयोग कर रही है।
कोई संकेत क्यों हो रहा है?
--- अद्यतन ----
64 के लिए मंच लक्ष्य को बदलने से एक अलग परीक्षण परियोजना पर समस्या हल हो जाती। दुर्भाग्य से मूल परियोजना x64 नहीं हो सकती है क्योंकि संदर्भ x86 DLLs करते हैं जो x64 पर काम नहीं करते हैं। लेकिन यह एक और समस्या है।
मैंने इसे x64 में बदलने पर विचार नहीं किया क्योंकि यह स्मृति सीमा से बहुत दूर था, लेकिन मुझे लगता है कि हंस पासेंट 122 एमबी पर 1.3 जीबी सीमा से बहुत करीब था। आप सभी को धन्यवाद।
यह नहीं कि इसका उत्तर है, लेकिन आप इस तरह .NET स्मृति आवंटन की गणना नहीं कर सकते हैं। –
आपको मेमोरी उपयोग को प्रोफाइल करने के लिए विजुअल स्टूडियो में टूलींग का उपयोग करना चाहिए। https://msdn.microsoft.com/en-us/library/dn342825.aspx –
मुझे नहीं लगता कि यह भी जवाब है। लेकिन, .NET में प्रत्येक ऑब्जेक्ट में जानकारी के साथ शीर्षलेख है। 32 बिट ऐप में हेडर 8 बिट्स लम्बाई है, 64 बिट ऐप में हेडर 16bytes लंबाई है। तो, प्रत्येक फ्लोट 12bytes लंबाई (32 बिट ऐप में) का उपभोग करता है। अधिक कोड देखने के बिना असंभव बात यह है कि समस्या क्या है। –