जवाबों:
शब्द "अप्रबंधित संसाधन" का उपयोग आमतौर पर कचरा कलेक्टर के नियंत्रण में सीधे कुछ का वर्णन करने के लिए किया जाता है । उदाहरण के लिए, यदि आप किसी डेटाबेस सर्वर से कनेक्शन खोलते हैं, तो यह सर्वर पर संसाधनों का उपयोग करेगा (कनेक्शन को बनाए रखने के लिए) और संभवतः क्लाइंट मशीन पर अन्य गैर.नेट संसाधन, यदि प्रदाता पूरी तरह से प्रबंधित कोड में नहीं लिखा गया है।
यही कारण है कि, डेटाबेस कनेक्शन की तरह कुछ के लिए, यह अनुशंसा की जाती है कि आप अपना कोड इस प्रकार लिखें:
using (var connection = new SqlConnection("connection_string_here"))
{
// Code to use connection here
}
जैसा कि यह सुनिश्चित करता है कि .Dispose()
कनेक्शन ऑब्जेक्ट पर कहा जाता है, यह सुनिश्चित करते हुए कि किसी भी अप्रबंधित संसाधनों को साफ किया जाता है।
प्रश्नोत्तर में अप्रबंधित संसाधन क्या हैं? 1 , ब्रूस वुड ने निम्नलिखित पोस्ट किया:
मैं इस तरह से "प्रबंधित" और "अप्रबंधित" शब्दों के बारे में सोचता हूं:
"प्रबंधित" .NET सैंडबॉक्स में कुछ भी संदर्भित करता है। इसमें सभी .NET फ्रेमवर्क कक्षाएं शामिल हैं।
"अनमैन्डेड" .NET सैंडबॉक्स के बाहर जंगल को संदर्भित करता है। इसमें कुछ भी शामिल है जो आपको Win32 API फ़ंक्शन के लिए कॉल के माध्यम से लौटाया गया है।
यदि आप कभी भी Win32 API फ़ंक्शन को कॉल नहीं करते हैं और किसी भी Win32 "हैंडल" ऑब्जेक्ट को वापस नहीं लेते हैं, तो आप किसी भी मानव रहित संसाधन को नहीं रख रहे हैं। .NET फ्रेमवर्क क्लास मेथड के माध्यम से आपके द्वारा खोली जाने वाली फाइलें और स्ट्रीम सभी प्रबंधित रैपर हैं।
टिप्पणी: आप सीधे अप्रबंधित संसाधन नहीं रख सकते हैं । हालाँकि, आप अप्रबंधित संसाधन को अप्रत्यक्ष रूप से प्रबंधित "आवरण वर्ग" जैसे System.IO.FileStream के माध्यम से रख सकते हैं । इस तरह के एक रैपर वर्ग आमतौर पर आईडीआईसोपेरिकल (या तो सीधे या विरासत के माध्यम से) लागू करता है।
... कई प्रबंधित (.NET फ्रेमवर्क) ऑब्जेक्ट उनके अंदर अप्रबंधित संसाधनों को धारण कर रहे हैं, और आप शायद जितनी जल्दी हो सके उन्हें निपटाना चाहते हैं (या कम से कम अपने कॉलर्स को ऐसा करने का अवसर प्रदान करते हैं। यहीं से अपना डिसपोजल () मेथड लिखने की विधि आती है। अनिवार्य रूप से, आइडिसोप्लिक () को लागू करना आपके लिए दो काम करता है:
आपको .NET के बैक (अनवांटेड रिसोर्सेज) के पीछे ऑपरेटिंग सिस्टम से सीधे पकड़े गए किसी भी संसाधन से छुटकारा पाने की अनुमति देता है।
आपको और आपके कॉल करने वालों को हेफ़्टी। NET ऑब्जेक्ट्स / .NET ऑब्जेक्ट्स को जारी करने की अनुमति देता है जो आपके ग्रुबी छोटे हाथों में अनमोल संसाधन रखते हैं जिन्हें आप / आपके कॉलर्स अब जारी करना चाहते हैं ।
टिप्पणी: लागू करने IDisposable
और इस तरह एक Dispose()
विधि प्रदान करने से, आप अपने वर्ग के एक उपयोगकर्ता को निर्धारक फैशन में किसी भी अप्रबंधित संसाधनों को जारी करने में सक्षम कर रहे हैं जो आपके वर्ग द्वारा उदाहरण के लिए आयोजित किए जाते हैं।
1 लिंक मूल रूप से सचिन शानबाग के जवाब में साझा किया गया है । 2005-11-17 को उद्धृत सामग्री। ध्यान दें कि मैंने उद्धृत सामग्री को हल्के से कॉपी-एडिट किया है।
एक प्रबंधित और अप्रबंधित संसाधन के बीच बुनियादी अंतर यह है कि कचरा कलेक्टर सभी प्रबंधित संसाधनों के बारे में जानता है, किसी समय जीसी साथ आएगा और एक प्रबंधित वस्तु से जुड़े सभी मेमोरी और संसाधनों को साफ करेगा। जीसी को मानव रहित संसाधनों के बारे में नहीं पता है, जैसे कि फाइलें, स्ट्रीम और हैंडल, इसलिए यदि आप उन्हें अपने कोड में स्पष्ट रूप से साफ नहीं करते हैं, तो आप मेमोरी लीक और लॉक किए गए संसाधनों के साथ समाप्त हो जाएंगे।
अधिक जानकारी के लिए - http://bytes.com/topic/c-sharp/answers/276059-what-unmanaged-resource