Как очистить неуправляемые ресурсы в C # [дубликат]

Jan 20 2021

У меня есть этот класс:

    public class A
    {
//Some logic code here
    }

Мой вопрос в том, как я могу удалить или уничтожить любой объект, созданный на основе этого класса, после выхода из области видимости?

Например:

  A a = new A();
    //some code here

после того, как //some code hereя хочу, чтобы aобъект был уничтожен или удален и освободил выделенную ему память.

Ответы

1 ispiro Jan 20 2021 at 03:55

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

Короткий ответ: нет. Сборщик мусора автоматически позаботится об этом, когда сочтет это необходимым. (Вам не нужно запускать сборщик мусора. Это происходит автоматически.)

Затем сборщик мусора ищет объекты, которые вышли из области видимости, как aв вашем примере, и освобождает использованное пространство. Затем он увидит, что внутренние компоненты aтакже, очевидно, вышли из области видимости (если они не упоминаются в другом месте вашего кода), и обработает их.

Сказав это, когда вы используете переменные классов, которые реализуют Dispose, лучше всего вызывать Disposeявно или использовать usingблоки для этого. Вы также можете реализовать финализатор, который будет выполняться при aудалении. Но похоже, что вы спрашивали не об этом.