[c#] هل يستدعي جامع القمامة Dispos ()؟



Answers

الجواب المختصر هو "لا". يمكن العثور على إجابات أكثر تفصيلاً في إجاباتي على "هل من الممارسات السيئة الاعتماد على جامع البيانات المهملة .NET" و "ماذا يحدث إذا لم أتصل بـ Dispose ()"

Question

هذا السؤال لديه بالفعل إجابة هنا:

اعتقدت أن GC سيطلب Dispose في نهاية المطاف إذا لم يكن البرنامج الخاص بك ولكن يجب عليك استدعاء Dispose () في البرنامج الخاص بك فقط لجعل التنظيف Detinistic.

ومع ذلك ، من برنامجي التجريبي الصغير ، لا أرى أن تتخلص من اسمها على الإطلاق ....

public class Test : IDisposable
{
    static void Main(string[] args)
    {
        Test s = new Test();
        s = null;
        GC.Collect();
        Console.ReadLine();
    }

    public Test()
    {
        Console.WriteLine("Constructor");
    }

    public void Dispose()
    {
        Console.WriteLine("Dispose");
    }
}

// الإخراج هو مجرد "منشئ" ، وأنا لا أحصل على "التخلص" كما أتوقع. ماذا تفعل؟

تحرير: نعم ، أعرف أنني يجب أن أتصل Dispose () - أتابع النمط القياسي عند استخدام الكائنات القابل للتصرف. سؤالي يظهر لأنني أحاول تعقب تسرب في رمز شخص ما ، والذي يدار C ++ (طبقة أخرى من التعقيد الذي سيكون موضوع جيد لموضوع آخر).




Links