2009-03-18 16 views

उत्तर

0

इस धागे को देखें: Maximum Heap size - केवल समाधान को और अधिक मेमोरी प्लग करना है।

11

This thread बिल्कुल वही दिखता है जो आप चाहते हैं।

यदि मैं एमवीपी की पोस्ट को सही ढंग से पढ़ रहा हूं, तो 32-बिट सिस्टम पर आप 1.5 जीबी हीप आकार तक सीमित हैं, इससे कोई फर्क नहीं पड़ता कि आप प्रक्रिया शुरू होने के तुरंत बाद क्या प्राप्त करते हैं। 64-बिट सिस्टम पर आपका ढेर अनिवार्य रूप से असीमित है, मुझे नहीं लगता कि कोई भी मुख्यधारा सर्वर या पीसी 64-बिट प्रक्रिया के रूप में जितनी भौतिक स्मृति रख सकता है।

+1

क्या होगा यदि आप ढेर के आकार को एक निश्चित राशि तक सीमित करना चाहते हैं? –

+0

सुनिश्चित करें कि आप अपनी असेंबली x64 या किसी भी CPU पर बनाते हैं! यदि आप x86 पर बनाते हैं तो एक x64 ओएस/हार्डवेयर पर भी आपके पास 1.5 जीबी सीमा होगी। – Despertar

+0

मुझे लगता है कि ओपी केवल 256 एमबी का उपयोग करने के लिए नेट अनुप्रयोग के ढेर को सीमित करने के लिए कह रहा है। वह पूछ रहा है कि कोई तर्क/कॉन्फ़िगरेशन/पर्यावरण चर है जो ऐसा करेगा, जरूरी नहीं कि केवल ढेर बढ़ाना। –

5

जहां तक ​​मुझे मिला है, सीएलआर का उपयोग करते हुए .NET ऐप के ढेर के आकार को नियंत्रित करने का कोई आसान तरीका नहीं है।

@ डेव के उत्तर में लिंक केवल आधा सवाल का जवाब देता है। जब मैंने इस मुद्दे पर शोध किया है, तो प्रतिक्रिया है कि "ढेर सभी उपलब्ध स्मृति का उपयोग करने के लिए बढ़ता है" जैसे कि यही कारण है कि आप अधिकतम ढेर आकार को नियंत्रित करना चाहते हैं।

ऑन (आमतौर पर जावा) सर्वर वातावरण, आप अन्य होस्ट किए गए ऐप्स की कीमत पर एक बुरी तरह से व्यवहार करने वाले ऐप को याद रखने के लिए नहीं चाहते हैं। एक सरल समाधान यह है कि ऐप की मात्रा को सीमित करने के लिए ऐप का उपयोग कर सकते हैं। यह जावा के-एक्सएमएक्स तर्क के साथ पूरा किया जाता है ताकि आप गारंटी दे सकें कि ऐप योजनाबद्ध की तुलना में अधिक उपयोग नहीं करेगा, उदाहरण के लिए -Xmx256M। चूंकि प्रारंभिकरण के दौरान ढेर पर स्मृति आवंटित करने से ऐप स्टार्टअप धीमा हो सकता है, जावा -Xms arg का उपयोग करता है ताकि ऐप को ऑब्जेक्ट सृजन के बहुत सारे होते हैं ताकि प्रारंभिक समय के दौरान हेप के बड़े ब्लॉक के साथ प्रारंभ करने के लिए जेवीएम के रूप में ढेर का आकार बदल सके जाता है।

.Net के सीएलआर में यह क्षमता नहीं है। मुझे संदेह है कि ऐसा इसलिए है क्योंकि नेट की सीएलआर वर्चुअल मशीन नहीं है। सीएलआर एक एपीआई (काफी व्यापक, मैं जोड़ सकता हूं) होता है जो देशी। डीएलएस के एडाप्टर के रूप में कार्य करता है जो स्मृति प्रबंधन की बात करते समय निष्पादन योग्य की तरह एक दृष्टिकोण के बराबर होता है।

मैंने इस सवाल को शेयरपॉइंट विकास के बारे में पूछा है और यह सुना है कि वेब ऐप्स नामक आईआईएस मॉड्यूल के उपयोग के माध्यम से हेपसाइज को नियंत्रित करना संभव हो सकता है जिससे आप आईआईएस को किसी दिए गए वेब ऐप की याददाश्त को सीमित कर सकें। मुझे आश्चर्य है कि ऐसा इसलिए है क्योंकि आईआईएस ने दिनचर्या को अनुकूलित किया है जो नए()/malloc()/etc को प्रतिस्थापित/ओवरराइड करता है और इस प्रकार क्लाइंट ऐप्स पर इस प्रकार का नियंत्रण प्रदान कर सकता है। इसका मतलब है कि स्टैंडअलोन .Net ऐप्स भाग्य से बाहर हैं जब तक आप सी ++ में कस्टम मेमोरी मैनेजर लिखना नहीं चाहते हैं और .NET

नीचे पंक्ति यह है कि एक सीएलआर प्रोग्राम जो भी मेमोरी प्रबंधन नीतियों/होस्टिंग को नियंत्रित करता है प्रक्रिया जगह में डालता है। यही कारण है कि आपको आईआईएस के भीतर से सी # वेब पेज के अपने मेमोरी उपयोग को नियंत्रित करना है, क्योंकि आईआईएस वास्तव में एक मेजबान प्रक्रिया है जो सीएलआर कोड निष्पादित करने के लिए पर्यावरण प्रदान करती है।

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