एकत्रित कचरा प्राप्त करने के लिए आईडीस्पोजेबल इंटरफ़ेस को कार्यान्वित करने की आवश्यकता है, मुझे यकीन नहीं है कि क्लास ऑब्जेक्ट्स को परिभाषित करने वाले उपयोगकर्ता कचरे को कैसे एकत्र करते हैं। क्या मुझे हर वर्ग पर आईडीस्पोजेबल इंटरफ़ेस को लागू करने की आवश्यकता है और स्मृति को मुक्त करने के लिए निपटान() विधि को कॉल करें?क्या प्रत्येक उपयोगकर्ता परिभाषित वर्ग को
उत्तर
नहीं। प्रत्येक सामान्य प्रबंधित .NET ऑब्जेक्ट को कचरा इकट्ठा किया जाता है जब आप इसका जिक्र करते हैं। IDISposable का मतलब है कि आप एक निपटान() विधि को लागू करेंगे जिसे कॉलर द्वारा बुलाया जाना चाहिए - यह आमतौर पर उन चीजों को जारी करता है जिन्हें एकत्रित नहीं किया जाता है। यह स्मृति को जारी करने के लिए एक निर्धारित स्थान होने में भी मदद करता है।
http://www.atalasoft.com/cs/blogs/stevehawley/archive/2006/09/21/10887.aspx
नहीं, प्रत्येक ऑब्जेक्ट स्वचालित रूप से निपटाया जाता है।
आईडीस्पोजेबल उपयोग योग्य है जब आपके पास ऑब्जेक्ट डिसोनस्ट्रक्शन पर कुछ प्रकार का विशेष ऑपरेशन होता है। उदाहरण के लिए यदि आप अपने ऑब्जेक्ट के काम के दौरान फाइलों जैसे कुछ संसाधनों को लॉक करते हैं, तो आप उन्हें अपने निपटान विधि में छोड़ सकते हैं।
IDISposable का उपयोग तब किया जाना चाहिए जब आप अपने कोड में फ़ाइल स्ट्रीम जैसे कुछ देशी संसाधनों का उपयोग करना चाहते हैं। अन्य सभी उद्देश्यों के लिए, नेट कचरा कलेक्टर एक अच्छा काम करता है।
बस आईडीस्पोजेबल को लागू करने से कचरा संग्रह लागू नहीं होता है। किसी भी मूल संसाधन को साफ करने के लिए निपटान विधि को स्पष्ट रूप से बुलाया जाना चाहिए।
संपादित करें: मैं आपको जेफ रिचटर द्वारा ClR via C# में कचरा संग्रह अध्याय के माध्यम से जाने की सलाह दूंगा।
नहीं। आपके उपयोगकर्ता परिभाषित वर्ग को कचरा संग्रह है जब इसे कहीं और संदर्भित नहीं किया जाता है। आप इसे classObject = null
कर कर मजबूर कर सकते हैं। यदि वह उस एप्लिकेशन का अंतिम भाग है जो वर्तमान में classObject
का संदर्भ दे रहा है तो कचरा संग्रह इसकी याददाश्त को साफ़ कर देगा।
IDisposable
अधिकतर उपयोग किया जाता है ताकि आप using()
विधियों के माध्यम से कचरा संग्रहण गतिविधियों को व्यवस्थित कर सकें।
कोई यह नहीं है: IDisposable पैटर्न बाहर
चेक सुनिश्चित करें कि आप इसे सही करने के बनाने के लिए। Dispose()
विधि को अतिरिक्त कार्य करने के लिए डिज़ाइन किया गया है जो संसाधनों का निपटान करते हैं जिन्हें ऑब्जेक्ट का उपयोग नहीं किया जाता है जब निपटान किया जाना चाहिए। याद रखें, ऑब्जेक्ट आखिरी संदर्भ खोने के बाद एकत्रित कचरा एक लंबा समय हो सकता है।
जब IDisposable
आप वस्तु निपटाने चाहिए जब अपने fx using
के साथ किया
using (SomeClassWithDisp object = new SomeClassWithDisp())
{
//Use the object
}
भी तरह प्रयोग किया जाता है, देखें:
What is the difference between using IDisposable vs a destructor in C#?
नेट में, सभी वस्तुओं जारी की जानी चाहिए कचरा कलेक्टर के साथ मेमोरी से डिफ़ॉल्ट रूप से जब तक उनका उपयोग नहीं किया जा रहा है, इसलिए आपको हर वर्ग पर आईडीस्पोजेबल को लागू करने की आवश्यकता नहीं है, लेकिन कुछ प्रकार के ज्ञापन होना अच्छा है आरई रिलीज तंत्र, एक विनाशक या निपटान विधि की तरह ही।
यह एक नाशक का एक अच्छा उदाहरण इस्तेमाल किया जा रहा है: http://www.developer.com/net/csharp/article.php/3343191/C-Tip-Forcing-Garbage-Collection-in-NET.htm
निपटाने() विधि आप को लागू स्पष्ट रूप से ऊपर अप्रबंधित संसाधन (फ़ाइलें, धाराओं, संभालती है, आदि) जो करने के लिए अपने वस्तु एक रखती है मुक्त करने के लिए प्रयोग किया जाता है संदर्भ।
विचार यह है कि आप निपटान विधि को कॉल करके जितनी जल्दी हो सके इन संसाधनों को मुक्त कर देंगे। निपटान() विधि तुरंत आपके ऑब्जेक्ट पर कचरा संग्रह नहीं चलाएगी, बल्कि संसाधनों को छोड़ देंगी और कचरा कलेक्टर को इसके लिए सुविधाजनक होने पर अपनी चीज करने की अनुमति देगी।
- 1. जेएसटीएल - उपयोगकर्ता द्वारा परिभाषित वर्ग
- 2. उपयोगकर्ता द्वारा परिभाषित मूल्य वर्ग जावा से क्या दिखते हैं?
- 3. परिभाषित उपयोगकर्ता परिभाषित मार्गदर्शिका
- 4. उपयोगकर्ता द्वारा परिभाषित प्रकार
- 5. लॉग 4नेट: प्रत्येक वर्ग
- 6. प्रत्येक MATLAB वर्ग
- 7. उपयोगकर्ता द्वारा परिभाषित स्कीमा
- 8. क्या MySQL समर्थन उपयोगकर्ता परिभाषित डेटा प्रकार
- 9. अस्थिर वर्ग वस्तु को परिभाषित करना
- 10. जावा - प्रत्येक स्विंगवर्कर वर्ग को एक और
- 11. उपयोगकर्ता परिभाषित निर्देशिका
- 12. क्या आईआईएस प्रत्येक जुड़े उपयोगकर्ता को थ्रेड देता है?
- 13. उपयोगकर्ता द्वारा परिभाषित समानता
- 14. django: प्रत्येक उपयोगकर्ता डेटा को अलग रखें
- 15. उपयोगकर्ता परिभाषित सीएमपी फ़ंक्शंस
- 16. उपयोगकर्ता द्वारा परिभाषित फ़ंक्शन
- 17. ज: उपयोगकर्ता परिभाषित वस्तु
- 18. PostgreSQL उपयोगकर्ता परिभाषित कार्यों को डिबग करना
- 19. उपयोगकर्ता परिभाषित TYPE डेटाबेस में
- 20. उपयोगकर्ता परिभाषित डेटाटाइप को एक शब्दकोश में
- 21. क्या प्रत्येक वर्ग में आभासी विनाशक होना चाहिए?
- 22. क्या यह मूल अभिभावक वर्ग पर परिभाषित किए बिना किसी बच्चे वर्ग पर सदस्य को परिभाषित करना संभव है? सी #
- 23. मेरे उपयोगकर्ता वर्ग
- 24. jquery $ ('वर्ग')। प्रत्येक() कितने आइटम?
- 25. भौतिक बूस्ट। उपयोगकर्ता परिभाषित साहित्य
- 26. उपयोगकर्ता द्वारा परिभाषित रूपांतरण बनाना
- 27. कंपाइलर त्रुटि: उपयोगकर्ता-परिभाषित प्रकार
- 28. कैसे mysql उपयोगकर्ता परिभाषित समारोह
- 29. RcppArmadillo पास उपयोगकर्ता परिभाषित समारोह
- 30. उपयोगकर्ता द्वारा परिभाषित कक्षा को अचूक बनाता है?
आपकी प्रतिक्रिया के लिए धन्यवाद। तो अगर मेरे पास कक्षा ए है और इसके सार्वजनिक फ़ंक्शन में से एक बिटमैप जैसे अप्रबंधित ऑब्जेक्ट बनाता है और बिटमैप को कॉल करता है। डिसस्पेक्ट(), तो क्या यह कचरा इकट्ठा होगा या कक्षा ए बिटमैप का संदर्भ रखता है? – kishore
जब आप निपटान() को कॉल करते हैं, तो इसे सही तरीके से निपटाया जाएगा (ऑब्जेक्ट अब अनुपयोगी है)। यदि आपने नहीं किया, तो जीसी अंततः इसे प्राप्त कर लेगा, और यदि यह सही लिखा गया था (यह था) तो अंतिमकरण निपटान() को कॉल करेगा। लेकिन, निपटान() को कॉल करना आवश्यक है (इसे स्वचालित रूप से करने के लिए उपयोग कथन का उपयोग करें)। –
इसके अलावा, आपको निश्चित रूप से IDISposable लागू नहीं करना चाहिए जब तक कि आपको आवश्यकता न हो। इससे जीसी धीमी गति से उन्हें निपटना पड़ता है (अंतिम रूप देने के लिए याद रखना आदि)। यदि आपके पास ऐसी संपत्ति है जो डिस्पोजेबल या अप्रबंधित संसाधन है, तो इसे लागू करें। –