Jak wyczyścić niezarządzane zasoby w C # [duplikat]

Jan 20 2021

Mam tę klasę:

    public class A
    {
//Some logic code here
    }

Moje pytanie brzmi: w jaki sposób mogę pozbyć się lub zniszczyć dowolny obiekt utworzony na podstawie tej klasy po wyjściu z zakresu?

Na przykład:

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

po tym, //some code herejak chcę, aby aobiekt został zniszczony lub usunięty i zwolniony jest jego przydzielona pamięć.

Odpowiedzi

1 ispiro Jan 20 2021 at 03:55

Zignoruję tytuł i skoncentruję się na treści pytania, ponieważ wydaje się oczywiste z pytania, na czym polega problem.

Krótka odpowiedź: nie. Zostanie to zrobione automatycznie przez odśmiecacz, gdy uzna to za konieczne. (Nie musisz uruchamiać modułu odśmiecania pamięci. Dzieje się to automatycznie).

Moduł odśmiecania pamięci szuka następnie jednostek, które wyszły poza zakres, jak aw Twoim przykładzie, i zwolni zajmowane przez nich miejsce. Zobaczy wtedy, że elementy wewnętrzne programu arównież, oczywiście, wyszły poza zakres (chyba że istnieją odniesienia do nich w innym miejscu w kodzie) i obsłużą je.

Powiedziawszy to, kiedy używasz zmiennych klas, które implementują Dispose, najlepiej jest wywołać je Disposejawnie lub użyć usingbloków, aby to zrobić. Możesz również zaimplementować finalizator, który zostanie wykonany, gdy azostanie usunięty. Ale wygląda na to, że nie o to pytałeś.