Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C#

C# में Finalize और Dispose में क्या अंतर है?


Finalize

Finalize() को गारबेज कलेक्टर द्वारा उस ऑब्जेक्ट के पुनः प्राप्त करने से पहले बुलाया जाता है जो संग्रह के लिए योग्य है। गारबेज कलेक्टर अनरेफरेंस्ड ऑब्जेक्ट के लिए मेमोरी को डीएलोकेट करने की जिम्मेदारी लेता है। गारबेज कलेक्टर इस मेथड को उस समय के कुछ बिंदु पर कॉल करता है जब मेमोरी में उस ऑब्जेक्ट के लिए कोई वैध रेफरेंस नहीं रह जाते।

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

उदाहरण

using System; 
namespace DemoApplication{ 
    public class Demo{ 
        ~Demo(){ 
            Console.WriteLine("Finalize called"); 
        } 
    } 
}

Dispose

कुछ संसाधन जैसे विंडोज हैंडल्स, डेटाबेस कनेक्शन, नेटवर्क कनेक्शन, फाइलें आदि हैं जिन्हें गारबेज कलेक्टर द्वारा एकत्र नहीं किया जा सकता। यदि हम कुछ विशिष्ट ऑब्जेक्ट्स को स्पष्ट रूप से जारी करना चाहते हैं तो IDisposable को लागू करना और IDisposable इंटरफेस के Dispose() मेथड को ओवरराइड करना सबसे अच्छा है।

Dispose() मेथड स्वचालित रूप से नहीं बुलाया जाता और हमें क्लाइंट एप्लिकेशन से स्पष्ट रूप से इसे कॉल करना होगा जब ऑब्जेक्ट की अब आवश्यकता नहीं है। Dispose() को तब भी बुलाया जा सकता है जब ऑब्जेक्ट के अन्य रेफरेंस जीवित हों।

उदाहरण

using System; 
namespace DemoApplication{ 
    public class Demo : IDisposable{ 
        private bool disposed = false; 
        public void Dispose(){ 
            Dispose(true); 
            GC.SuppressFinalize(this); 
        } 
        protected virtual void Dispose(bool disposing){ 
            if (!disposed){ 
                if (disposing){ 
                    // मैनेज्ड ऑब्जेक्ट्स को साफ करें 
                } 
                // अनमैनेज्ड ऑब्जेक्ट्स को साफ करें 
                disposed = true; 
            } 
        } 
    } 
}

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


  1. डायरेक्टएक्स 11 और डायरेक्टएक्स 12 में क्या अंतर है? डायरेक्टएक्स 11 और डायरेक्टएक्स 12 में क्या अंतर है?

    डायरेक्टएक्स एपीआई का एक संग्रह है, या एप्लिकेशन प्रोग्रामिंग इंटरफेस, जिसका उपयोग सॉफ्टवेयर द्वारा मल्टीमीडिया सामग्री को रेंडर करने और ग्राफिकल हार्डवेयर के साथ संचार करने के लिए किया जाता है। डायरेक्टएक्स का प्रमुख घटक एपीआई, डायरेक्ट3डी, सॉफ्टवेयर और ग्राफिक्स हार्डवेयर के बीच संचार को संभालता ह

  1. - C# में String और string में क्या अंतर है?

    String का मतलब System.String है जबकि string C# में System.String के लिए एक एलियास (alias) है।उदाहरण के लिए:string str = Welcome!;यह आवश्यक नहीं है, लेकिन आमतौर पर String का उपयोग तब किया जाता है जब आप क्लासेस के साथ काम करते हैं।string str = String.Format(Welcome! {0}!, user);चूंकि string System.Str

  1. - C# में लिस्ट और ऐरे में क्या अंतर है?

    एक ऐरे एक ही प्रकार के एलिमेंट्स के निश्चित आकार के अनुक्रमिक संग्रह को स्टोर करता है, जबकि लिस्ट एक जेनेरिक कलेक्शन है।लिस्ट को परिभाषित करने के लिए:List myList = new List();लिस्ट में एलिमेंट्स सेट करने के लिए, आपको Add मेथड का उपयोग करना होगा:myList.Add(Audi); myList.Add(BMW); myList.Add(Chevrolet