Подтвердить что ты не робот

Вызывается ли сборщик мусора Dispose()?

Я думал, что GC вызовет Dispose в конечном итоге, если ваша программа не будет, но вы должны вызвать Dispose() в своей программе, чтобы сделать дефрагментацию очистки.

Однако из моей маленькой тестовой программы я вообще не вижу Dispose для вызова...

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", как я ожидал. Что?

РЕДАКТИРОВАТЬ: Да, я знаю, что я должен вызвать Dispose() - я выполняю стандартный шаблон при использовании одноразовых объектов. Мой вопрос возникает из-за того, что я пытаюсь найти утечку в чей-то код elses, которым управляет С++ (другой уровень сложности, который был бы хорошим предметом другого потока).

4b9b3361

Ответ 1

GC не вызывает Dispose, он вызывает ваш финализатор (который вы должны сделать call Dispose(false)).

Пожалуйста, просмотрите соответствующие сообщения на стороне или найдите лучшие методы С# для шаблона Dispose (docs на IDisposable объясните это довольно хорошо IIRC.)