अगर मैं एक ManagementObjectSearcher
उपयोग कर रहा हूँ, मैं आसानी से यह एक using
ब्लॉक में लपेट कर सकते हैं:नेट डब्लूएमआई कक्षाएं - मुझे किसको निपटान करना है?
using (var searcher = new ManagementObjectSearcher(scope, query))
{
// ...
}
यह भी आसान the collection returned from the searcher निपटान के लिए, इस तथ्य के कारण है कि foreach
automatically calls dispose on the enumerator:
using (var searcher = new ManagementObjectSearcher(scope, query))
{
foreach(ManagementObject mo in searcher.Get())
{
// ...
}
}
लेकिन ManagementObject
IDisposable
लागू करता है:
using (var searcher = new ManagementObjectSearcher(scope, query))
{
foreach(ManagementObject mo in searcher.Get())
{
// ...
mo.Dispose(); // ?
}
}
- क्या मुझे इस परिदृश्य में प्रत्येक
ManagementObject
उदाहरण वापस लेना है? - यदि मैं करता हूं, तो मैं इसे अपवाद सुरक्षित कैसे बना सकता हूं?
- क्या कोई तरीका है कि मैं अभी भी इस परिदृश्य में लिंक का उपयोग कर सकता हूं (और अभी भी
Dispose
पर ठीक से कॉल करें)? खासकरsearcher.Get().First()
जैसे निर्माण के साथ?
संपादित: कुछ और संबंधित प्रश्नों:
- मैं भी खोज परिणाम संग्रह पर
Dispose
कॉल करने के लिए है? - खोजकर्ता के बारे में कैसे?
वे दोनों भी, अपने स्वयं के IDisposable
तरीका लागू हालांकि यह खोजकर्ता की तरह लगता है केवल Component
से Dispose
कार्यान्वयन विरासत में; यह अपने स्वयं के निपटान व्यवहार को जोड़ता नहीं है।
System.ComponentModel.Component
और
you should call Dispose
explicitly सभी के लिए से
आपके उत्तर देने के बाद मेरे प्रश्न को बुलाने के लिए खेद है। कृपया मेरे संपादन देखें। आप नीचे दिए गए शब्दकोष का जिक्र करते हैं जो कहता है कि आपको हमेशा 'घटक' से प्राप्त कक्षाओं पर 'निपटान' को कॉल करना चाहिए। हालांकि, क्या इस वर्ग के लिए कोई कारण है जो अपना स्वयं का 'निपटान' कार्यान्वयन नहीं जोड़ता है? मैं प्रतिबिंबक से देखता हूं कि 'घटक 'पर' निपटान 'की गड़बड़ी में कुछ रोचक चीजें हैं, लेकिन ऐसा लगता है जैसे यह केवल तभी लागू होगा जब मैंने इसे किसी प्रकार के" साइट "संदर्भ में उपयोग किया हो। मैं यह नहीं बता सकता कि क्या इस मामले में लागू होता है ... –
इसे चेक किया गया, और 'साइट' शून्य लगता है। मैं घटनाओं को निपटाने के लिए बाध्यकारी नहीं हूं, इसलिए ऐसा लगता है कि यह इस मामले में कुछ भी नहीं करेगा। लेकिन मैं आपके दो सेंट की सराहना करता हूं। –
मुझे लगता है कि निम्नलिखित ढांचे डेवलपर्स सिफारिशें एक अच्छी प्रथा है। वास्तव में, आपको कोड के इस संस्करण को वास्तव में कैसे काम करता है इस बारे में कोई अनुमान या धारणा बनाने के लिए परावर्तक या अन्य किसी भी चीज़ का उपयोग नहीं करना चाहिए। एमएसडीएन में माइक्रोसॉफ्ट लिखता है कि आपको 'घटक' से विरासत में मिली प्रत्येक वस्तु के लिए 'निपटान' को कॉल करना होगा। यदि आपको कुछ जटिल उपयोग-मामले या ढांचे के आगे के संस्करणों में समस्याएं नहीं मिल सकती हैं।विनिर्देशों को अनदेखा करना पहली बात है क्योंकि एप्लिकेशन ओएस या फ्रेमवर्क के नए संस्करण में विफल रहता है। – oxilumin