एक कारण यह है कि आपका सिस्टम रुकावट में आ सकता है क्योंकि .NET का कोड धातु के करीब आता है और आप एक तंग लूप में हैं जो 100% सीपीयू का उपभोग करेगी, बशर्ते प्रोसेस प्राथमिकता इसे अनुमति दे। यदि आप कसकर लूप करने के दौरान एप्लिकेशन को बहुत अधिक CPU का उपभोग करने से रोकना चाहते हैं तो आपको लूप के अंत में System.Threading.Thread.Sleep(10) जैसे कुछ जोड़ना चाहिए, जो जबरन अन्य थ्रेडों को प्रोसेसिंग समय प्रदान करेगा।
जेवीएम और .NET के सीएलआर (कॉमन लैंग्वेज रनटाइम) के बीच एक बड़ा अंतर यह है कि सीएलआर आपकी स्मृति के आकार को x64 सिस्टम/एप्लिकेशन (32 बिट अनुप्रयोगों में, बड़े पते के बारे में ओएस ध्वज के बिना सीमित नहीं करता है संबोधित सीमाओं के कारण 2 जीबी तक किसी भी आवेदन को सीमित करता है)। जेआईटी कंपाइलर आपके प्रोसेसिंग आर्किटेक्चर के लिए देशी विंडोज कोड बनाता है और फिर इसे उसी दायरे में चलाता है कि कोई भी अन्य विंडोज़ एप्लीकेशन चलाएगा। JVM एक अलग पृथक सैंडबॉक्स है जो कॉन्फ़िगरेशन/कमांड लाइन स्विच के आधार पर एप्लिकेशन को निर्दिष्ट आकार में बाध्य करता है।
दो एल्गोरिदम के बीच मतभेद का सवाल है: जब पर्याप्त सन्निहित स्मृति के साथ एक 64 वातावरण में चल रहा 4GB int.MaxValue वर्ण हो करने के लिए आवश्यक आवंटित करने के लिए
एकल स्ट्रिंग निर्माण इसकी गारंटी नहीं है विफल (.NET तार डिफ़ॉल्ट रूप से यूनिकोड हैं, जिसके लिए प्रति अक्षर 2 बाइट्स की आवश्यकता होती है)। एक बड़ा 32 पता एप्लिकेशन हमेशा विफल रहता है, यहां तक कि बड़े पते के पता ध्वज सेट के साथ भी, क्योंकि अधिकतम मेमोरी अभी भी 3.5 जीबी की तरह है)।
आपके कोड का समय लूप संस्करण अधिक समग्र स्मृति का उपभोग करेगा, बशर्ते आपके पास अपवाद फेंकने से पहले पर्याप्त उपलब्ध हो, क्योंकि आपके तारों को छोटे टुकड़ों में आवंटित किया जा सकता है, लेकिन अंततः त्रुटि को हिट करने की गारंटी है (हालांकि अगर आपके पास बहुत सारे संसाधन हैं, यह एक छोटी स्ट्रिंग के लिए नई जगह आवंटित करने में असमर्थता के बजाय सरणी सूची में सरणी तत्वों की अधिकतम संख्या से अधिक होने के परिणामस्वरूप हो सकता है)। केंट मुरा स्ट्रिंग इंटर्निंग के बारे में भी सही है; आपको इंटर्निंग से बचने के लिए स्ट्रिंग या वर्ण सामग्री की लंबाई को यादृच्छिक करने की आवश्यकता होगी, अन्यथा आप एक ही स्ट्रिंग पर पॉइंटर्स बना रहे हैं। स्टीव टाउनसेंड की स्ट्रिंग लम्बाई बढ़ाने की सिफारिश भी मेमोरी के बड़े पर्याप्त ब्लॉक को आने के लिए कठिन बनाती है, जिससे अपवाद अधिक तेज़ी से होने की अनुमति देगा।
संपादित करें:
:
इन दो लेख एक छोटे से बड़े हैं, लेकिन गहराई पढ़ने में बहुत अच्छा कर रहे हैं:
सोचा मैं कुछ लिंक लोग नेट स्मृति को समझने के लिए काम मिल सकता है देना चाहते हैं Garbage Collection: Automatic Memory Management in the Microsoft .NET Framework
Garbage Collection Part 2: Automatic Memory Management in the Microsoft .NET Framework
ये एक .NET कूड़ा संग्रह से विकसित ब्लॉग हैं एर नेट स्मृति प्रबंधन के नए संस्करण के बारे में जानकारी के लिए:
So, what’s new in the CLR 4.0 GC?
CLR 4.5: Maoni Stephens - Server Background GC
यह तो सवाल यह आप की अंदरूनी कामकाज का निरीक्षण करने में मदद कर सकते हैं।नेट मेमोरी:
.NET Memory Profiling Tools
दूसरा क्या करता है? – SLaks
दूसरा एक जेस्ट तब तक चलता रहता है जब तक मेरी मशीन प्रतिक्रिया न दे और मुझे इसे बूट करना पड़ेगा – ksm
यह इस पोस्ट के भविष्य के आगंतुकों के लिए ध्यान देने योग्य हो सकता है .net 4.5 अगर मैं इसे सही तरीके से पढ़ रहा हूं तो इस सीमा को हटा दें। http://msdn.microsoft.com/en-us/library/hh285054(v=vs.110).aspx – TravisWhidden