जहां तक मुझे मिला है, सीएलआर का उपयोग करते हुए .NET ऐप के control the size of the heap का कोई आसान तरीका नहीं है।
उपरोक्त लिंक केवल आधे प्रश्न का उत्तर देता है। जब मैंने इस मुद्दे पर शोध किया है, तो प्रतिक्रिया है कि "ढेर सभी उपलब्ध स्मृति का उपयोग करने के लिए बढ़ता है" जैसे कि यही कारण है कि आप अधिकतम ढेर आकार को नियंत्रित करना चाहते हैं।
ऑन (आमतौर पर जावा) सर्वर वातावरण, आप अन्य होस्ट किए गए ऐप्स की कीमत पर एक बुरी तरह से व्यवहार करने वाले ऐप को याद रखने के लिए नहीं चाहते हैं। एक सरल समाधान यह है कि ऐप की मात्रा को सीमित करने के लिए ऐप का उपयोग कर सकते हैं। यह जावा के-एक्सएमएक्स तर्क के साथ पूरा किया जाता है ताकि आप गारंटी दे सकें कि ऐप योजनाबद्ध की तुलना में अधिक उपयोग नहीं करेगा, उदाहरण के लिए -Xmx256M।चूंकि प्रारंभिकरण के दौरान ढेर पर स्मृति आवंटित करने से ऐप्स स्टार्टअप धीमा हो सकता है, जावा -Xms arg का उपयोग करता है ताकि ऐप को ऑब्जेक्ट सृजन करने के लिए प्रारंभिक समय के दौरान हेप के बड़े ब्लॉक के साथ प्रारंभ करने के लिए प्रारंभ किया जा सके, JVM के बदले में ढेर का आकार बदलना जाता है।
.Net के सीएलआर में यह क्षमता नहीं है। मुझे संदेह है कि ऐसा इसलिए है क्योंकि नेट की सीएलआर वर्चुअल मशीन नहीं है। सीएलआर एक एपीआई (काफी व्यापक, मैं जोड़ सकता हूं) होता है जो देशी। डीएलएस के एडाप्टर के रूप में कार्य करता है जो स्मृति प्रबंधन की बात करते समय निष्पादन योग्य की तरह एक दृष्टिकोण के बराबर होता है।
मैंने इस सवाल को शेयरपॉइंट विकास के बारे में पूछा है और यह सुना है कि वेब ऐप्स नामक आईआईएस मॉड्यूल के उपयोग के माध्यम से हेपसाइज को नियंत्रित करना संभव हो सकता है जिससे आप आईआईएस को किसी दिए गए वेब ऐप की याददाश्त को सीमित कर सकें। मुझे आश्चर्य है कि ऐसा इसलिए है क्योंकि आईआईएस ने दिनचर्या को अनुकूलित किया है जो नए()/malloc()/etc को प्रतिस्थापित/ओवरराइड करता है और इस प्रकार क्लाइंट ऐप्स पर इस प्रकार का नियंत्रण प्रदान कर सकता है। इसका मतलब है कि स्टैंडअलोन .Net ऐप्स भाग्य से बाहर हैं जब तक आप सी ++ में कस्टम मेमोरी मैनेजर लिखना नहीं चाहते हैं और .NET
स्रोत
2009-08-05 15:31:42
धन्यवाद - सीएलआर होस्टिंग के बारे में दिलचस्प जानकारी। संभवतया मैं जो कुछ भी कर रहा हूं उसके लिए अधिक मात्रा में - मैं बस यह सुनिश्चित करूँगा कि मैं एक स्मृति हॉग नहीं हूं। – serg10
साझा सर्वर वातावरण जो एकाधिक ऐप्स होस्ट करते हैं, यह सुनिश्चित करना चाहिए कि उसके सभी क्लाइंट ऐप्स द्वारा आवंटित अधिकतम मेमोरी उपलब्ध स्मृति को ओवरकमिट न करे। आप नहीं चाहते कि एक भी गलत व्यवहार करने वाला ऐप पूरे सर्वर को नीचे ले जाए क्योंकि यह सभी उपलब्ध स्मृति आवंटित करता है। –
@ केली, यह है कि आईआईएस और एसक्यूएल सर्वर क्या करते हैं, क्योंकि वे अन्य प्रबंधित ऐप्स के लिए मेजबान हैं, और वे नियंत्रित करते हैं कि होस्ट किए गए एप्लिकेशन की कितनी मेमोरी है ... दूसरी तरफ एक गैर होस्टेड .Net ऐप मुफ्त है एक मूल ऐप जितना आवंटित करने के लिए, वहां कोई फर्क नहीं पड़ता है (यही कारण है कि .net में होस्टिंग एपिस आवंटित स्मृति की मात्रा को नियंत्रित करने के लिए उपयोग किया जाना चाहिए) –