2012-09-18 7 views
7

मेरे पास dynamic COM ऑब्जेक्ट है जो मेरी कक्षा में एक निजी क्षेत्र के रूप में है। मुझे यकीन नहीं है कि इसे प्रबंधित संसाधन माना जाता है (जीसी इसे साफ़ करता है), या नहीं।क्या गतिशील COM ऑब्जेक्ट प्रबंधित संसाधन मानते हैं?

private dynamic _comConnector = null; 

...

_comConnector = Activator.CreateInstance(Type.GetTypeFromProgID("SomeProgId")); 

जब IDispose को लागू करने, मैं इसे एक प्रबंधित संसाधन (केवल जब निपटान() स्पष्ट रूप से कहा जाता है) के रूप में साफ करना चाहिए, या एक देशी संसाधन के रूप में (जब निपटान (झूठा) फाइनलजर से भी कहा जाता है)?

private void Dispose(bool disposing) 
{ 
    if (disposing) 
    { 
     // Free managed resources // 

     // --> Should I call Marshal.FinalReleaseComObject(_comConnector) here? 
    } 

    // Free unmanaged resources // 

    // --> Or maybe here? 
} 
+0

हां, जीसी इसे साफ़ करता है। यह IDISposable लागू नहीं करता है इसलिए निपटान करने के लिए कुछ भी नहीं है। –

+0

गुगलिंग के बाद यहां पहुंचा 'सक्रियकर्ता है। क्रिएट इंस्टेंस प्रबंधित या अप्रबंधित' ... और मैं निपटान के कारण देख रहा था। –

उत्तर

6

यह एक प्रबंधित संसाधन (मूल रूप से एक रनटाइम कॉल करने योग्य रैपर) है और आपको इसे इस तरह साफ करना चाहिए। MSDN states that:

प्रत्येक RCW COM वस्तु यह लपेटता है और RCW अब जरूरत है जब COM वस्तु पर अपने संदर्भ विज्ञप्ति पर इंटरफ़ेस संकेत की एक कैश रखता है। रनटाइम आरसीडब्ल्यू पर कचरा संग्रह करता है।

आईई। आरसीडब्ल्यू एक प्रबंधित संसाधन है जो अप्रबंधित COM संदर्भों को लपेटता है।

एक तरफ, COM ऑब्जेक्ट्स को जारी करना खतरनाक हो सकता है यदि आप this blog post from Chris Brumme में वर्णित अनुसार अपने आवेदन में एकाधिक स्थानों में एकाधिक थ्रेड से उनका उपयोग कर रहे हैं।

यदि आप किसी स्कोप्ड, एकल-थ्रेडेड तरीके से COM ऑब्जेक्ट का उपयोग कर रहे हैं तो आप उस ऑब्जेक्ट पर रिलीजकॉम ऑब्जेक्ट को सुरक्षित रूप से कॉल कर सकते हैं जब आप इसके साथ काम करते हैं: उम्मीद है कि यह आपका मामला है।

0

1 COM एक घटक है, इसलिए यह सब उस पर निर्भर करता है जो वह करता है। शिखर बफ़र्स, सूचकांक बफ़र्स, बनावट, आदि

: यदि वह निम्न कार्यक्षमताओं

  • फ़ाइलें खोलें

  • ओपन नेटवर्क कनेक्शन

  • अप्रबंधित स्मृति

  • XNA में पूरा करता है

=> तो हाँ यह गैर ressource

कचरा कलेक्टर इस ressource के बारे में जानकारियां नहीं है में कामयाब होता है, ताकि स्वच्छ उपयोगकर्ता

2 के लिए है स्वच्छ के लिए, तुम सिर्फ Dispose विधि (या गुट का उपयोग कर उपयोग कर सकते हैं; जो उपचार के अंत में निपटान कहते हैं)।

संबंधित मुद्दे