मैं एक .NET अनुप्रयोग पर काम कर रहा हूं जहां एक स्मृति रिसाव प्रतीत होता है। मुझे टेक्स्ट बुक उत्तर पता है, कि घटनाओं का सदस्यता रद्द किया जाना चाहिए, डिस्पोजेबल वस्तुओं का निपटान आदि होना चाहिए ...डीबगिंग .NET मेमोरी लीक - यह जानने के लिए कि क्या संदर्भ है?
मेरे पास एक परीक्षण दोहन है जो त्रुटि को पुन: उत्पन्न कर सकता है। एक निश्चित वर्ग के finalizer में सांत्वना देने मैं लिखने
public class Foo
{
// Ctor
public Foo()
{
}
~public Foo()
{
Console.WriteLine("Foo Finalized");
}
}
परीक्षण दोहन में, मैं फू (जो बारी में बनाता है और अन्य प्रकार के सैकड़ों के साथ सूचना का आदान प्रदान) का एक उदाहरण बनाने रहा हूँ तो यह दूर करने और लागू कचरा इकट्ठा करने वाला।
मुझे लगता है कि फू फ़ाइनलाइज़र कभी नहीं कहा जाता है। मेरे पास इस सेटअप के साथ एक समान वर्ग है जिसे नियंत्रण परीक्षण के रूप में अंतिम रूप दिया गया है।
तो मेरे सवाल यह है:
मैं वाणिज्यिक या खुले स्रोत उपकरण वास्तव में क्या फू के लिए एक संदर्भ रखा है का उपयोग करते हुए निर्धारित कर सकते हैं कैसे?
मेरे पास डॉटट्रेस मेमोरी प्रोफाइलर के लिए एक पेशेवर लाइसेंस है लेकिन सहायता फ़ाइलों से इसका पता नहीं लगाया जा सकता है।
अद्यतन: मैं अब dotMemory 4.0 है, जो (अच्छा है, लेकिन व्यर्थ) dotTrace मेमोरी 3.5 का उत्तराधिकारी है का उपयोग कर रहा हूँ।
यदि आपके पास पहले से ही एक प्रोफाइलर इसका उपयोग करना सीखता है - मैंने डॉटट्रेस के साथ बहुत कुछ काम नहीं किया है, लेकिन मैं अन्य दो उपयोग-पैटर्न में समान हैं और कुछ को "इनरिंग" की आवश्यकता है – Carsten
@ CarstenKönig +1, मैं अब dotTrace में खुदाई कर रहा हूँ। पता लगाया गया है कि मैं नामस्थान द्वारा एक अनजान वस्तुओं को सूचीबद्ध कर सकता हूं (इसलिए मेरा अपमानजनक फू पाया गया) और उनके संदर्भ में क्या संदर्भ है, फिर नामस्थान (सैकड़ों) द्वारा फ़िल्टर किया गया, अब संदिग्ध ईवेंट हैंडलर आदि की एक सूची के माध्यम से जा रहा है ... –
@ CarstenKönig वास्तव में, यह dotTrace का उपयोग कर पाया! इसमें gcroot -> Foo से ग्राफ़ में ड्रिल करने की सुविधा है, खोजने के लिए थोड़ा मुश्किल है। चीयर्स :) –