2011-04-26 10 views
7

सी # में मेरे प्रोग्रामिंग अभ्यास के लिए, मैं 0x1fffffff (बेस 10 में 536,870,911) की लंबाई के साथ लंबे, की सरणी बनाने की कोशिश कर रहा हूं, हालांकि मुझे System.OutOfMEmoryException मिला।बड़े सरणी सी # आउटऑफमेमरीएक्सप्शन

बिल्ड के लिए, मैंने x64 सिस्टम को लक्षित किया है, और मैं विजुअलस्टूडियो 2008 को विंडोज 7 x64 पर 8 जीबी रैम के साथ चला रहा हूं। यह सरणी के लिए पर्याप्त स्मृति होना चाहिए (यह जेडीके x64 और सीपीपी प्रोजेक्ट पर काम करता है)

कोई विचार?

 const long MAX = 0x1fffffff; // 536870911 in base10 
     program.arr = new long[MAX]; 
     for (long i = 0; i < MAX; i++) 
     { 
      program.arr[i] = i;     
     } 
+0

एफवाईआई, इसे "सी #" कहा जाता है, न कि "सीएसएचआरपी"। –

+5

आप एक वस्तु को बड़ा नहीं बना सकते हैं। लेकिन यदि आप कर सकते हैं, तो आप भी इस गलतफहमी से पीड़ित हैं कि राम निर्धारित करता है कि आप कितनी मेमोरी आवंटित कर सकते हैं। यह दशकों तक नहीं है, और नहीं है। रैम सीमा की मात्रा कैसे * तेज़ * आप उस स्मृति तक पहुंच पाएंगे। बड़ी रैम होने के बाद एक प्रदर्शन अनुकूलन है; स्मृति आवंटन वास्तव में पृष्ठ फ़ाइल से आवंटन के रूप में सबसे अच्छा विचार किया जाता है। याद रखें, जब आप स्मृति आवंटित करते हैं तो आप आवंटित कर रहे हैं * वर्चुअल मेमोरी *, नहीं * हार्डवेयर मेमोरी *। –

उत्तर

25

सीएलआर लगभग 2 जीबी से अधिक आकार के किसी भी ऑब्जेक्ट का समर्थन नहीं करता है। आप 4,294,967,288 बाइट्स की सरणी मांग रहे हैं - जो दो बार समर्थित है।

आप उस स्मृति का उपयोग कर सकते हैं, लेकिन एक ही ऑब्जेक्ट (जैसे सरणी) में नहीं।

5

किसी भी तरह के सार्थक विकल्प की सिफारिश करना मुश्किल है क्योंकि आप यह नहीं बताते कि आप क्या हासिल करने की कोशिश कर रहे हैं, बस आप क्या नहीं कर सकते हैं।

यह कहा गया है कि अगर आपको वास्तव में ऐसा कुछ चाहिए जो एक फ्लैट एड्रेस स्पेस में एक तेज सम्मिलित दृश्य है, तो आकार में 2 जीबी से बड़ा आप MemoryMappedFile का उपयोग कर सकते हैं।

अगर आप संकेत दिया क्या स्मृति के इस गांठ, क्यों पता स्थान ही होना चाहिए में जा रहा करने के लिए है यह मदद मिलेगी सटे और क्यों यह की जरूरत है (उदाहरण के लिए अप्रबंधित कोड के लिए यह करने के लिए एक सूचक गुजर रहे हैं) फ्लैट एड्रेसिंग

0

सरणी के एक सबसेट बनाओ तो सरणी भरने

yourary []

masterarray [] < ------ भरें youraray [] बफर के 2GB तक तो यह masterarray में जोड़ने

संबंधित मुद्दे