मेरे पास एक सी # कॉम क्लास है जिसका उपयोग उमामेड कोड द्वारा किया जाता है। मैं इसे डीबग कर सकता हूं, लेकिन मुझे नहीं पता कि ऑब्जेक्ट कब जारी किया जाता है। यदि इसे सी ++ अवरोधक में कार्यान्वित किया गया था, तो सी # पर इसे जीसी को जारी किया जाएगा। क्या उस पल को ट्रैक करने का कोई तरीका है? अग्रिम धन्यवाद।कॉम ऑब्जेक्ट सी # की ट्रैक रिलीज।
उत्तर
अप्रबंधित संसाधनों को बनाए रखने वाले प्रबंधित प्रकार IDisposable इंटरफ़ेस को कार्यान्वित करना चाहिए। यह आपके कोड के उपभोक्ताओं को बताता है कि उन्हें आपके ऑब्जेक्ट्स के उदाहरणों पर Dispose()
पर कॉल करने की आवश्यकता है, यानी जब वे उनके साथ हों (यानी, उन्हें संभव होने पर using
ब्लॉक में लपेटें)।
IDisposable
का उचित कार्यान्वयन उनके अंतिमकरण में मूल संसाधनों को जारी करेगा, लेकिन ग्राहक अप्रबंधित संसाधनों की निर्धारिती रिलीज के लिए Dispose()
पर कॉल कर सकते हैं। किसी भी तरह से आप रिसाव से बचें, लेकिन जितनी जल्दी हो सके Dispose()
पर कॉल करना बेहतर है।
Here is an SO question जो प्रक्रिया का विवरण देता है।
समस्या यह है कि मैं अप्रबंधित कोड को नियंत्रित नहीं कर सकता। जीसी द्वारा नहीं किया जा सकता है कि कोई आवश्यक सफाई नहीं है। मैं सिर्फ यह जानना चाहता हूं कि मेरी वस्तु का जीवनकाल क्या अपेक्षित है। – user629926
यदि आपके पास मूल कोड पर कोई नियंत्रण नहीं है तो मुझे प्रश्न समझ में नहीं आता है। प्रबंधित कोड का मूल कोड साफ़ करने का कोई तरीका नहीं है जब तक कि देशी कोड ऐसा करने के लिए इंटरफ़ेस को परिभाषित नहीं करता है। आपके प्रबंधित रैपर की देखभाल करने वाला जीसी अप्रासंगिक है; यह सिर्फ मूल सामान को जादुई रूप से साफ नहीं करता है। आपको IDISposable को लागू करके और अपने मूल संसाधनों पर कुछ फ़ंक्शन को इसे मुक्त करने के लिए स्वयं को करना होगा। –
मेरे पास क्लीनअप के लिए कोई मूल संसाधन नहीं है, बस जानना चाहते हैं कि प्रबंधित वारपर कब महसूस किया जाता है। – user629926
क्या आप फाइनेंजर की तलाश में हैं? – SLaks
बस उत्सुक है, क्या आप इस स्थिति में एक सी # [विनाशक] (http://msdn.microsoft.com/en-us/library/66x5fx1b.aspx) का उपयोग कर सकते हैं? –
यहां कोई ख़ुशी नहीं है। आपका [कॉमविज़िबल] क्लास इंस्टेंस एक सादा पुराना .NET ऑब्जेक्ट है। यह सीसीडब्ल्यू में एक संदर्भ से जीवित रखा जाता है। अंतिम रिलीज() कॉल सीसीडब्ल्यू को नष्ट कर देता है लेकिन आपके .NET ऑब्जेक्ट से कुछ भी नहीं होता है। जब तक यह सामान्य की तरह कचरा इकट्ठा नहीं हो जाता है। आपको मूल कोड डीबग करने की आवश्यकता होगी। जहां समस्या कोई संदेह नहीं है वैसे भी। –