अपने IDisposables निपटान नहीं करने के परिणाम एक नगण्य प्रदर्शन हिट से भिन्न हो सकते हैं अपने ऐप को दुर्घटनाग्रस्त करने के लिए।
आपके उदाहरण में ब्रश ऑब्जेक्ट जीसी द्वारा साफ किया जाएगा जब ऐसा लगता है। लेकिन आपके कार्यक्रम को उस अतिरिक्त स्मृति का लाभ नहीं होगा जो आपको पहले साफ करके प्राप्त किया गया था। यदि आप ब्रश ऑब्जेक्ट्स का उपयोग कर रहे हैं तो यह महत्वपूर्ण हो सकता है। जीसी ऑब्जेक्ट्स को साफ करने में भी अधिक कुशल है अगर वे बहुत लंबे समय तक नहीं रहे हैं, क्योंकि यह एक पीढ़ी का कचरा कलेक्टर है।
दूसरी तरफ, डेटाबेस कनेक्शन ऑब्जेक्ट्स का निपटान न करने के नतीजे यह हो सकते हैं कि आप पूल किए गए डेटाबेस कनेक्शन से बहुत जल्दी बाहर निकलते हैं और आपके ऐप को क्रैश कर देते हैं।
या तो
using (new DisposableThing...
{
...
}
का उपयोग या, यदि आप, अपने जीवन भर के लिए अपने ऑब्जेक्ट में एक IDisposable के लिए एक संदर्भ पर पकड़ अपने वस्तु पर IDisposable को लागू करने और IDisposable के निपटान विधि कॉल करने की जरूरत है।
class MyClass : IDisposable
{
private IDisposable disposableThing;
public void DoStuffThatRequiresHavingAReferenceToDisposableThing() { ... }
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
//etc... (see IDisposable on msdn)
}
स्रोत
2008-09-22 20:04:57
यह उत्तर यह समझाने के लिए था कि आपने अपने संसाधनों को साफ करने के लिए _need_, जब आपको करना चाहिए, जैसा कि दूसरों ने किया था। मूल प्रश्न के स्वर से मैंने माना कि यह वही था जो चाहता था। – Guvante