2009-06-11 17 views
9

के लिए 2 जीबी का उपयोग करें मैंने पढ़ा है (http://blogs.msdn.com/joshwil/archive/2005/08/10/450202.aspx) कि .NET में किसी ऑब्जेक्ट का अधिकतम आकार 2 जीबी है।.NET अधिकतम मेमोरी x64 असेंबली

क्या मैं यह मानने में सही हूं कि यदि मेरे पास कोई ऑब्जेक्ट है जो 256 एमबी मेमोरी लेता है, क्योंकि यह संदर्भ प्रकार है, तो मेरे पास इन 256 एमबी ऑब्जेक्ट्स की एक सरणी हो सकती है जहां सभी ऑब्जेक्ट्स एक साथ ले सकते हैं> 2 जीबी मेमोरी जब तक संदर्भ सरणी का आकार 2 जीबी से नीचे रहता है?

+0

दिलचस्प सवाल है। मुझे नहीं पता था कि 64 बिट मशीन पर यह सीमा होगी। मैंने कहा कि मैं एक ऐप के लिए कई परिदृश्यों के बारे में नहीं सोच सकता जो एक ऑब्जेक्ट में 2 जीबी रखती है! – RichardOD

+0

मैं मानता हूं, ऐसे कई परिदृश्य नहीं हैं जहां आपको एक ही ऑब्जेक्ट में 2 जीबी से अधिक की आवश्यकता होगी। एक गेम सर्वर या डेटाबेस सर्वर वास्तव में एकमात्र चीज है जो दिमाग में आता है। – Nate

उत्तर

10

हां, आपकी धारणा सही है।

2 जीबी सीमा प्रत्येक वस्तु पर व्यक्तिगत रूप से लागू होती है। सभी वस्तुओं के लिए उपयोग की जाने वाली कुल मेमोरी 2 जीबी से अधिक हो सकती है।

(चाहे क्रम में अपनी आवश्यकताओं के लिए पर्याप्त स्मृति आवंटित करने में सक्षम है एक और बात। मुझे शक है कि यह एक 32 बिट मशीन पर अतिरिक्त स्मृति की एक पूरी 2GB मिल सकता है, लेकिन यह 64 बिट पर एक समस्या नहीं होनी चाहिए।)

+0

तो "संदर्भ सरणी" एक ऐसी वस्तु होगी जो (आमतौर पर) एक समान मात्रा में "पूर्णांक सरणी" के रूप में ले जाएगी? – Nate

+1

नेट> यह एक कार्यान्वयन विवरण है लेकिन संदर्भ वर्तमान में पॉइंटर्स हैं और इसलिए उनके पास पॉइंटर आकार के समान आकार है (सी में यह अधिकांश सिस्टम पर आकार (int) के समान था, लेकिन सी # int में हमेशा int32 का मतलब है) –

+0

यह विचित्र है कि .NET की ऐरे क्लास में विशेष विधियां हैं जो "लंबी" सरणी लंबाई तर्क लेती हैं। यदि सीमा 2 जीबी है तो एक सरणी लंबाई 32-बिट int को बहने के लिए असंभव है। – Qwertie

6

".NET 4 में और इससे पहले, कोई वस्तु 2GB से अधिक हो सकता है आकार में, 64-बिट प्रक्रियाओं में भी। कुछ वर्कलोड है कि बड़े सरणियों का उपयोग करें, हालांकि, इस आकार की सीमा को बाधित। इस प्रकार हो सकता है। नेट 4.5 64-बिट प्रक्रियाओं में सरणी के लिए सीमा को उठाने का समर्थन करता है, जैसे कि सरणी 2 जीबी से बड़ी हो सकती है। इसका मतलब है कि, उदाहरण के लिए, आप Int32.MaxValue Int32s की एक सरणी आवंटित कर सकते हैं, भले ही ऐसी सरणी 8 जीबी का उपभोग करेगी। .NET में बड़ी वस्तुओं को एक विशेष ढेर पर आवंटित किया जाता है, जिसे संयोग से बड़े ऑब्जेक्ट हीप (LOH) के रूप में नहीं जाना जाता है; .NET 4.5 एलओएच में महत्वपूर्ण प्रदर्शन सुधार भी देखा है, जिसमें ढेर में मुफ्त मेमोरी के प्रबंधन के लिए बेहतर एल्गोरिदम का उपयोग शामिल है। "

http://msdn.microsoft.com/en-us/library/hh285054(v=VS.110).aspx

http://blogs.msdn.com/b/somasegar/archive/2012/05/16/net-improvements-for-cloud-and-server-applications.aspx

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