ब्रायन की जवाब देने के लिए एक छोटे से जोड़ सकते हैं और अपनी टिप्पणी/सवाल करने के लिए:
एक प्रबंधित/अप्रबंधित संसाधन के बीच अंतर यह है कि कचरा कलेक्टर कामयाब संसाधनों के बारे में पता है और अप्रबंधित संसाधनों के बारे में पता नहीं है। मुझे पता है कि जवाब बहुत ठोस नहीं है लेकिन अंतर बहुत बड़ा है।
मदद करने के लिए रेत यहाँ में रेखा खींचना कैसे जीसी रन की कमी (और शायद थोड़ा त्रुटियों से छलनी) संस्करण है और स्मृति को साफ:
कचरा कलेक्टर सभी प्रबंधित वस्तुओं, लेकिन जब कचरे के बारे में पता है संग्रह चलता है यह प्रारंभ में नहीं जानता है कि कोई भी वस्तु अभी भी उपयोग में है या रिलीज होने के लिए योग्य है। यह निर्धारित करता है कि यह ऑब्जेक्ट को सभी ऑब्जेक्ट्स को कचरा के रूप में चिह्नित करके किसी ऑब्जेक्ट को साफ़ कर सकता है, फिर एप्लिकेशन रूट से सभी संदर्भित ऑब्जेक्ट्स पर जा रहा है। प्रत्येक ऑब्जेक्ट जिसमें रूट पर रिश्ते है (एक संदर्भ, या तो प्रत्यक्ष या अप्रत्यक्ष) पहुंच योग्य के रूप में चिह्नित किया जाता है और अब कचरा नहीं माना जाता है। जीसी प्रत्येक पहुंच योग्य वस्तु के माध्यम से चलता है, यह बाकी को साफ करता है क्योंकि वे अब उपयोग में नहीं हैं।
.NET फ्रेमवर्क ऑब्जेक्ट्स के साथ काम करने वाले लगभग सभी मामलों में आपको आश्वासन दिया जा सकता है कि ऑब्जेक्ट प्रबंधित किए जाते हैं (.NET लगभग सभी अप्रबंधित संसाधनों के प्रबंधित रैपर प्रदान करता है ताकि यह सुनिश्चित किया जा सके कि वे ठीक से साफ हो गए हैं); अन्य तृतीय पक्ष घटक जो Win32 API (या आपके घटकों को ऐसा करते हैं) में हुक करते हैं वे ऑब्जेक्ट्स हैं जो चिंता का कारण हो सकते हैं।
कुछ .NET ऑब्जेक्ट्स हैं जिन्हें कुछ हद तक अप्रबंधित माना जा सकता है। ग्राफिक्स पुस्तकालय के घटक एक उदाहरण हैं।
अधिकांश ".NET मेमोरी लीक" वास्तव में वास्तविक अर्थ में स्मृति रिसाव नहीं हैं। आम तौर पर वे तब होते हैं जब आप सोचते हैं आपने किसी ऑब्जेक्ट को उपयोग से हटा दिया है लेकिन वास्तव में ऑब्जेक्ट में अभी भी एप्लिकेशन का कुछ संदर्भ है। एक आम उदाहरण Eventhandlers जोड़ रहा है (obj.SomeEvent + = OnSomeEvent -or- AddHandler obj.SomeEvent, पताOf OnSomeEvent) और उन्हें हटा नहीं रहा है।
ये 'लिंग संदर्भ' तकनीकी रूप से मेमोरी लीक नहीं हैं क्योंकि आपका एप्लिकेशन अभी भी तकनीकी रूप से उनका उपयोग कर रहा है; हालांकि यदि उनमें से पर्याप्त हैं तो आपके आवेदन को गंभीर प्रदर्शन प्रभाव भुगत सकते हैं और संसाधन समस्याओं के संकेत दिखा सकते हैं (आउटऑफमेमरी अपवाद, खिड़की हैंडल प्राप्त करने में असमर्थ आदि)।
मैं एक मध्यवर्ती .NET डेवलपर हूं और दुर्भाग्य से इन समस्याओं के बारे में पहले से पता हूं। मैं लिंटिंग संदर्भों से परिचित होने में मदद करने के लिए एएनटीएस प्रोफाइलर के साथ खेलने की सलाह देता हूं (एक नि: शुल्क परीक्षण संस्करण है) या यदि आप प्रबंधित ढेर को देखने के लिए WinDbg और SOS.DLL का उपयोग करके थोड़ा और अधिक नट-किरकिरा शोध प्राप्त करना चाहते हैं। यदि आप बाद में देखने का फैसला करते हैं तो मैं टेस फेरांडेज़ ब्लॉग पढ़ने की सलाह देता हूं; विंडबग प्रभावी ढंग से
तो एक प्रबंधित प्रकार है कि IDisposable एक अप्रबंधित संसाधन को लागू नहीं करता है के साथ अपने प्रबंधित सफाई की रखवाली? हो सकता है कि मैं प्रकार छंद संसाधन द्वारा भ्रमित हो रहा हूं ... –
@Yooder: आपके पास एक प्रबंधित संसाधन कैसे हो सकता है जिसे किसी प्रकार से प्रदर्शित नहीं किया जाता है? –
@ लैरीफिक्स: अलग-अलग लोग शब्दावली का अलग-अलग उपयोग करते हैं, लेकिन मैं कहूंगा कि एक ऑब्जेक्ट जिसने कुछ और * कुछ और करने के लिए नहीं कहा है, आगे की सूचना तक, और दूसरों के नुकसान के लिए, कोई भी नहीं है * संसाधन। – supercat