2009-04-04 11 views
13

.NET प्रबंधित कोड में प्राप्त अधिकतम मेमोरी कौन सा है? क्या यह वास्तविक वास्तुकला (32/64 बिट्स) पर निर्भर करता है?अधिकतम .NET प्राप्त करने योग्य मेमोरी?

+0

हाँ वहाँ है .. यह एक शॉट दे दो और घड़ी 32 बिट आर्किटेक्चर पर लगभग 900 एमबी पर रनटाइम बम .. या बस एक सभ्य, यहां तक ​​कि बड़ा, डेटासेट भी चलाएं .. वास्तव में दुखद। –

+0

अधिक तथ्य अच्छे होंगे। –

+0

यदि आपको किसी तथ्य की आवश्यकता है तो आप इसे बेहतर लोड कर सकते हैं और आउटऑफमेमरी अपवाद के लिए इसे देख सकते हैं .. समस्या यह है कि आपको केवल कुछ ऐसे ऐप्स चलाने होंगे (आपको सभ्य आकार पता है) और voila: CLR कुशल सिद्धांतवादी इसके बारे में सभी लूप प्राप्त करते हैं। –

उत्तर

2

हाँ, एक 32 बिट परिवेश में आप एक 4GB पता अंतरिक्ष तक ही सीमित हैं, लेकिन विंडोज के बारे में आधे दावा करता है। 64 बिट्स आर्किटेक्चर पर, यह बहुत अच्छा है। मेरा मानना ​​है कि यह 4 जी है * 4 जी

और कम्पैक्ट फ्रेमवर्क पर यह आम तौर पर कुछ सौ एमबी

+2

4 जी * 4 जी कहकर लोग 16 जी सोचने के लिए गुमराह करेंगे। वास्तव में, 4 जी 2^32 बाइट्स है, इसलिए लगभग 4 बिलियन। और 64 बिट सीमा 2^64 = (2^32) * (2^32) है, जो (4 बिलियन) * (4 बिलियन) है और यह 16 जी से बहुत अधिक है। – Karl

11

के क्रम में है, कोई ठोस हैं नेट कोड के लिए सटीक आंकड़े।

यदि आप 32 बिट विंडोज़ पर चलते हैं; अपने प्रक्रिया आप एक 64 बिट बॉक्स पर एक 64 बिट प्रक्रिया अपने प्रक्रिया 8 अप करने के लिए पता कर सकते हैं चलाते हैं, तो/3GB स्विच Windows Server 2003.

पर प्रयोग किया जाता है 2 जीबी, 3 जीबी तक पता कर सकते हैं पता स्थान के टीबी, अगर वह रैम मौजूद है।

हालांकि यह पूरी कहानी नहीं है, क्योंकि सीएलआर प्रत्येक प्रक्रिया के लिए कुछ ओवरहेड लेता है। उसी समय, .NET भाग में नई मेमोरी आवंटित करने का प्रयास करेगा; और यदि पता स्थान खंडित किया गया है, तो इसका अर्थ यह हो सकता है कि आप अधिक स्मृति आवंटित नहीं कर सकते हैं, भले ही कुछ उपलब्ध हों।

+0

यह सच नहीं है। X86 पर विंडोज उपयोगकर्ता मोड विभाजन आकार को 8 टीबी (8192 जीबी) तक सीमित करता है। –

+1

"पूरे 64 बिट एड्रेस स्पेस को संबोधित कर सकता है, अगर वह रैम मौजूद है" कोई भी तरीका सही नहीं है और इसे संपादित किया जाना चाहिए .. –

+1

64 बिट विंडोज के तहत 32 बिट प्रक्रिया 4 जीबी उपयोगकर्ता स्पेस तक पहुंच सकती है (बड़े पते के बारे में जागरूक ... 3 जीबी अंडर/3 जीबी स्विच तक पहुंचने के लिए समान मानदंड)। – Richard

7

सी # 2.0 और 3.0 में प्रबंधित कोड में एक ऑब्जेक्ट के आकार पर 2 जी सीमा भी है।

0

मुझे लगता है कि अन्य उत्तर स्मृति की खपत अपने आवेदन वास्तव में बुरी तरह से व्यवहार करेंगे के 2GB के बाद काफी अनुभवहीन, असली दुनिया में किया जा रहा है। मेरे अनुभव में जीयूआई आम तौर पर बड़ी मात्रा में स्मृति खपत के बाद बड़े पैमाने पर घुटने टेकते हैं।

यह मेरा अनुभव था, इस बात का स्पष्ट रूप से वास्तविक कारण वस्तुओं हो सकता है बढ़ता है बहुत बड़ा तो उन वस्तुओं पर सभी कार्यों बहुत ज्यादा समय लगता है।

5

के लिए 64 बिट Windows आभासी स्मृति आकार तो उपयोगकर्ता प्रक्रियाओं 8 टीबी (8192 जीबी) पता कर सकते हैं, 16 टीबी समान रूप से उपयोगकर्ता और कर्नेल मोड के बीच विभाजित है। यह 64 बिट्स द्वारा संबोधित पूरे 16 EB स्थान से कम है, लेकिन यह 32 बिट्स के साथ उपयोग किए जाने वाले कार्यों से कहीं अधिक है।

3

.NET रनटाइम अपने होस्ट में उपयोगकर्ता-मोड प्रोग्राम के लिए उपलब्ध सभी निःशुल्क मेमोरी आवंटित कर सकता है। ध्यान दें कि इसका मतलब यह नहीं है कि वह सभी स्मृति आपके कार्यक्रम के लिए समर्पित होगी, क्योंकि कुछ (अपेक्षाकृत छोटे) भाग आंतरिक सीएलआर डेटा संरचनाओं को समर्पित किए जाएंगे। 32 बिट सिस्टम में, 4 जीबी या अधिक सेटअप मानते हैं (भले ही पीएई सक्षम है), आप अपने आवेदन के लिए आवंटित 2 जीबी तक पहुंचने में सक्षम होना चाहिए। 64 बिट सिस्टम पर आपको 1TB प्राप्त करने में सक्षम होना चाहिए। विंडोज मेमोरी सीमा से संबंधित अधिक जानकारी के लिए, कृपया this page की समीक्षा करें। वहां वर्णित प्रत्येक आंकड़े को 2 से विभाजित किया जाना चाहिए, क्योंकि विंडोज़ कर्नेल मोड (रिंग 0) में चल रहे कोड द्वारा उपयोग के लिए पता स्थान का उच्च आधा हिस्सा सुरक्षित रखता है। इसके अलावा, कृपया ध्यान दें कि जब भी 32 बिट सिस्टम के लिए सीमा 4 जीबी से अधिक हो जाती है, तो PAE का उपयोग निहित है, और इस प्रकार आप अभी भी 2 जीबी सीमा से अधिक नहीं हो सकते हैं जब तक कि ओएस 4 जीटी का समर्थन न करे, इस मामले में आप 3 जीबी तक पहुंच सकते हैं ।

7

स्मृति की मात्रा आपके नेट प्रक्रिया पता कर सकते हैं दोनों यह एक 32/64 बिट मशीन पर चल रहा है या नहीं पर और चाहे या नहीं यह एक सीपीयू नास्तिक या CPU विशिष्ट प्रक्रिया के रूप में चल रहा है यह निर्भर करता है।

डिफ़ॉल्ट एक .NET प्रक्रिया से तो यह प्रक्रिया प्रकार है कि Windows के संस्करण के लिए स्वाभाविक है के साथ चलेंगे सीपीयू नास्तिक है। 64 बिट में यह 64 बिट प्रक्रिया होगी, और 32 बिट में यह 32 बिट प्रक्रिया होगी।आप एक विशेष सीपीयू को लक्षित करने के लिए एक .NET प्रक्रिया को मजबूर कर सकते हैं और कहें कि इसे 64 बिट मशीन पर 32 बिट प्रक्रिया के रूप में चलाएं।

आप बड़े पते के बारे में पता सेटिंग बाहर करते हैं, निम्नलिखित विभिन्न ब्रेकडाउन

  • 32 बिट प्रक्रिया 2GB पता कर सकते हैं
  • 64 बिट प्रक्रिया 8TB

यहाँ पता कर सकते हैं कर रहे हैं एक कड़ी है Windows द्वारा प्रदान किए जाने वाले विभिन्न विकल्पों के आधार पर एड्रेसेबल स्पेस के पूर्ण टूटने के लिए।

http://msdn.microsoft.com/en-us/library/aa366778.aspx

0

निम्न ब्लॉग पोस्ट x86 और x64 अधिकतम स्मृति पर निष्कर्ष विस्तृत हो गया है। इसमें एक छोटा सा उपकरण भी उपलब्ध है (स्रोत उपलब्ध है) जो विभिन्न मेमोरी विकल्पों की आसान पूर्व संध्या की अनुमति देता है: http://www.guylangston.net/blog/Article/MaxMemory

5

मैं हाल ही में 32 बिट प्रक्रिया पर .NET में स्मृति सीमाओं के आसपास व्यापक प्रोफाइलिंग कर रहा हूं। हम सभी इस विचार से बमबारी हो गए हैं कि हम एक .NET आवेदन में 2.4 जीबी (2^31) तक आवंटित कर सकते हैं लेकिन असुविधाजनक यह सच नहीं है :(। आवेदन प्रक्रिया में उपयोग करने के लिए बहुत अधिक जगह है और ऑपरेटिंग सिस्टम एक महान काम करता है नौकरी हमारे लिए इसका प्रबंधन करती है, हालांकि, .NET का अपना ओवरहेड लगता है जो सामान्य वास्तविक अनुप्रयोगों के लिए 600-800 एमबी के लिए जिम्मेदार है जो स्मृति सीमा को धक्का देता है। इसका मतलब है कि जैसे ही आप पूर्णांक की एक सरणी आवंटित करते हैं 1.4 जीबी, आपको आउटऑफमेमरी एक्सेप्शन()

स्पष्ट रूप से 64 बिट में, यह सीमा बाद में होती है (चलो 5 साल में चैट करें :)), लेकिन स्मृति में सबकुछ का सामान्य आकार भी बढ़ता है (मुझे लगता है शब्द वृद्धि के कारण यह ~ 1.7 से ~ 2 गुना है)।

मुझे यह सुनिश्चित करने के लिए क्या पता है कि ऑपरेटिंग सिस्टम से वर्चुअल मेमोरी विचार निश्चित रूप से आपको एक प्रक्रिया के भीतर लगभग अंतहीन आवंटन स्थान नहीं देता है। यह केवल इतना है कि पूर्ण 2.4 जीबी एक ही समय में चल रहे सभी (कई) अनुप्रयोगों को संबोधित करने योग्य है।

मुझे आशा है कि यह अंतर्दृष्टि कुछ हद तक मदद करेगी।

मैं मूल रूप से यहां से संबंधित कुछ उत्तर नहीं दिया (मैं कर रहा हूँ अभी भी एक newby इतना यकीन है कि कैसे मैं इन कड़ियों क्या करना चाहिए नहीं कर रहा हूँ):

Is there a memory limit for a single .NET process

+0

आप एक ही जवाब को कई बार क्यों पोस्ट करना चाहते थे? –

+0

क्षमा करें, एक नोब हूँ। आप इस साइट पर संबंधित प्रश्नों और उत्तरों को कैसे लिंक करते हैं? –

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