.NET में "प्रबंधित" बनाम "अप्रबंधित" संसाधनों से क्या मतलब है?


जवाबों:


80

शब्द "अप्रबंधित संसाधन" का उपयोग आमतौर पर कचरा कलेक्टर के नियंत्रण में सीधे कुछ का वर्णन करने के लिए किया जाता है । उदाहरण के लिए, यदि आप किसी डेटाबेस सर्वर से कनेक्शन खोलते हैं, तो यह सर्वर पर संसाधनों का उपयोग करेगा (कनेक्शन को बनाए रखने के लिए) और संभवतः क्लाइंट मशीन पर अन्य गैर.नेट संसाधन, यदि प्रदाता पूरी तरह से प्रबंधित कोड में नहीं लिखा गया है।

यही कारण है कि, डेटाबेस कनेक्शन की तरह कुछ के लिए, यह अनुशंसा की जाती है कि आप अपना कोड इस प्रकार लिखें:

using (var connection = new SqlConnection("connection_string_here"))
{
    // Code to use connection here
}

जैसा कि यह सुनिश्चित करता है कि .Dispose()कनेक्शन ऑब्जेक्ट पर कहा जाता है, यह सुनिश्चित करते हुए कि किसी भी अप्रबंधित संसाधनों को साफ किया जाता है।


20
मैं इसे थोड़ा स्पष्ट करूँगा: "अनवांटेड रिसोर्स" कुछ ऐसा है जो कूड़ा उठाने वाले को पता नहीं चलेगा कि इसे छोड़ दिया गया है या नहीं। उदाहरण के लिए, एक लंबे समय से रहने वाली वस्तु से एक घटना के लिए एक अल्पकालिक वस्तु की सदस्यता, एक अप्रबंधित संसाधन होगा, भले ही दोनों वस्तुएं कचरा-कलेक्टर के नियंत्रण में हों, क्योंकि जीसी के पास यह जानने का कोई तरीका नहीं होगा कि सदस्यता सब्सक्राइबर को छोड़ दिया जाता है, लेकिन प्रकाशक नहीं है यदि प्रकाशक के जीवन के दौरान ग्राहकों की एक निर्बाध संख्या बनाई जा सकती है और छोड़ दी जाती है, तो इससे मेमोरी रिसाव हो सकता है।
सुपरकैट

12
थोड़ा और अधिक स्पष्टीकरण जोड़ना: SqlConnection (या FileStream, आदि) प्रबंधित संसाधन हैं जो आंतरिक रूप से अप्रबंधित संसाधनों का उपयोग करते हैं, जो GC अनजान है।
jimvfr

2
jimvfr सही है, SqlConnection प्रबंधित संसाधनों का एक उदाहरण है। अप्रबंधित संसाधनों का एक उदाहरण है जब हमें मार्शल का उपयोग करके मेमोरी को आवंटित करने की आवश्यकता होती है विधि मार्शल का उपयोग करके। AllocHGlobal () यह एक अप्रबंधित संसाधन है इस मामले में सबसे अच्छा अभ्यास एक विध्वंसक (~ ctor) का उपयोग करता है और Marshal.FreeHGlobal () का उपयोग करें। इस स्मृति को जारी करने के लिए।
योरोग थोमाज़ जूल

क्या आप प्रबंधित और अप्रबंधित दोनों संसाधनों के लिए एक उदाहरण दे सकते हैं।
राधा मनोहर

32

प्रबंधित संसाधन वे होते हैं जो शुद्ध .NET कोड होते हैं और रनटाइम द्वारा प्रबंधित होते हैं और इसके प्रत्यक्ष नियंत्रण में होते हैं।

मानव रहित संसाधन वे हैं जो नहीं हैं। फ़ाइल हैंडल, पिन की गई मेमोरी, COM ऑब्जेक्ट, डेटाबेस कनेक्शन आदि।


13

प्रश्नोत्तर में अप्रबंधित संसाधन क्या हैं? 1 , ब्रूस वुड ने निम्नलिखित पोस्ट किया:

मैं इस तरह से "प्रबंधित" और "अप्रबंधित" शब्दों के बारे में सोचता हूं:

"प्रबंधित" .NET सैंडबॉक्स में कुछ भी संदर्भित करता है। इसमें सभी .NET फ्रेमवर्क कक्षाएं शामिल हैं।

"अनमैन्डेड" .NET सैंडबॉक्स के बाहर जंगल को संदर्भित करता है। इसमें कुछ भी शामिल है जो आपको Win32 API फ़ंक्शन के लिए कॉल के माध्यम से लौटाया गया है।

यदि आप कभी भी Win32 API फ़ंक्शन को कॉल नहीं करते हैं और किसी भी Win32 "हैंडल" ऑब्जेक्ट को वापस नहीं लेते हैं, तो आप किसी भी मानव रहित संसाधन को नहीं रख रहे हैं। .NET फ्रेमवर्क क्लास मेथड के माध्यम से आपके द्वारा खोली जाने वाली फाइलें और स्ट्रीम सभी प्रबंधित रैपर हैं।

टिप्पणी: आप सीधे अप्रबंधित संसाधन नहीं रख सकते हैं । हालाँकि, आप अप्रबंधित संसाधन को अप्रत्यक्ष रूप से प्रबंधित "आवरण वर्ग" जैसे System.IO.FileStream के माध्यम से रख सकते हैं । इस तरह के एक रैपर वर्ग आमतौर पर आईडीआईसोपेरिकल (या तो सीधे या विरासत के माध्यम से) लागू करता है।

... कई प्रबंधित (.NET फ्रेमवर्क) ऑब्जेक्ट उनके अंदर अप्रबंधित संसाधनों को धारण कर रहे हैं, और आप शायद जितनी जल्दी हो सके उन्हें निपटाना चाहते हैं (या कम से कम अपने कॉलर्स को ऐसा करने का अवसर प्रदान करते हैं। यहीं से अपना डिसपोजल () मेथड लिखने की विधि आती है। अनिवार्य रूप से, आइडिसोप्लिक () को लागू करना आपके लिए दो काम करता है:

  1. आपको .NET के बैक (अनवांटेड रिसोर्सेज) के पीछे ऑपरेटिंग सिस्टम से सीधे पकड़े गए किसी भी संसाधन से छुटकारा पाने की अनुमति देता है।

  2. आपको और आपके कॉल करने वालों को हेफ़्टी। NET ऑब्जेक्ट्स / .NET ऑब्जेक्ट्स को जारी करने की अनुमति देता है जो आपके ग्रुबी छोटे हाथों में अनमोल संसाधन रखते हैं जिन्हें आप / आपके कॉलर्स अब जारी करना चाहते हैं

टिप्पणी: लागू करने IDisposableऔर इस तरह एक Dispose()विधि प्रदान करने से, आप अपने वर्ग के एक उपयोगकर्ता को निर्धारक फैशन में किसी भी अप्रबंधित संसाधनों को जारी करने में सक्षम कर रहे हैं जो आपके वर्ग द्वारा उदाहरण के लिए आयोजित किए जाते हैं।


1 लिंक मूल रूप से सचिन शानबाग के जवाब में साझा किया गया है । 2005-11-17 को उद्धृत सामग्री। ध्यान दें कि मैंने उद्धृत सामग्री को हल्के से कॉपी-एडिट किया है।


5

एक प्रबंधित और अप्रबंधित संसाधन के बीच बुनियादी अंतर यह है कि कचरा कलेक्टर सभी प्रबंधित संसाधनों के बारे में जानता है, किसी समय जीसी साथ आएगा और एक प्रबंधित वस्तु से जुड़े सभी मेमोरी और संसाधनों को साफ करेगा। जीसी को मानव रहित संसाधनों के बारे में नहीं पता है, जैसे कि फाइलें, स्ट्रीम और हैंडल, इसलिए यदि आप उन्हें अपने कोड में स्पष्ट रूप से साफ नहीं करते हैं, तो आप मेमोरी लीक और लॉक किए गए संसाधनों के साथ समाप्त हो जाएंगे।

अधिक जानकारी के लिए - http://bytes.com/topic/c-sharp/answers/276059-what-unmanaged-resource


1
"आइडीएसोपायरी इंटरफ़ेस के पीछे विचार यह है कि आपको नियतात्मक फैशन में संसाधनों को साफ करने और अप्रबंधित संसाधनों को साफ करने की अनुमति है।" भयानक!
जिओपी

0

प्रबंधित संसाधन वे संसाधन हैं जिन्हें कचरा संग्रहकर्ता द्वारा मुक्त किया जा सकता है और अप्रबंधित संसाधनों को कचरा कलेक्टर द्वारा मुक्त नहीं किया जा सकता है इस प्रयोजन के लिए विध्वंसक की आवश्यकता होती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.