जबकि हर किसी ने (अप्रबंधित) संसाधनों का उल्लेख किया है, मेरे पास जोड़ने के लिए एक और चीज है: जब मैं ईवेंट हैंडलर हुकअप को खत्म करने की आवश्यकता होती हूं तो मैं इसका उपयोग करता हूं जो अन्यथा कक्षा को दायरे से बाहर जाने और कचरा इकट्ठा करने से रोकता है।
उदाहरण के तौर पर, मेरे पास एक ऐसी सेवा है जो बच्चे के दृश्य में इंजेक्शन दी जाती है, कि बच्चा दृश्य सेवा पर विभिन्न एसिंक समाप्त प्रकार की घटनाओं की सदस्यता लेगा। उस बच्चे के दृश्य के मालिक को पता नहीं है कि ठोस प्रकार क्या है, यह बस इसे एक इंटरफेस के रूप में है। सेवा भविष्य में कुछ मनमानी बिंदु पर गुंजाइश से बाहर हो सकती है, और मैं नहीं चाहता कि यह जीसीएड न होने के आसपास लटक रहा हो। उस बच्चे के दृश्य से छुटकारा पाने के बाद, मालिक किसी भी ईवेंट हैंडलर को खोलने का मौका देने के लिए उस पर निपटान करेगा। यहां थोड़ा सा संकुचित (और बहुत छद्म कोड) उदाहरण है, ध्यान दें कि बच्चे के दृश्य के लिए इंटरफेस भी IDisposable
लागू करता है।
public class OwnerView {
public OwnerView() {
_childView = new ChildView(myServiceReference);
}
public void CloseChildView() {
if (childView != null) {
_childView.Close();
_childView.Dispose();
}
_childView = null;
}
private IChildView _childView;
}
public class ChildView : IChildView {
public ChildView(MyService serviceRef) {
_serviceRef = serviceRef;
_serviceRef.GetSettingsAsyncFinished += new EventHandler(someEventHandler);
}
public void IDisposable.Dispose() {
_serviceRef -= someEventHandler;
}
private MyService _serviceRef;
}
public interface IChildView : IDisposable {
void DoSomething();
... etc ...
}
वहाँ, इतने पर दूसरों से कहीं अधिक आधिकारिक टिप्पणी नहीं इस बारे में कर रहे हैं Do event handlers stop garbage collection from occuring? और Garbage collection when using anonymous delegates for event handling की तरह। आप यह codeproject आलेख भी देखना चाहेंगे।
@ एरविकर: यदि आपने उस विषय पर मुझसे अधिक पाया है, तो मैं इसकी सराहना करता हूं कि आप इसे मेरे साथ साझा करें। – Bobby
http://stackoverflow.com/search?q=IDisposable+owner –