Jak wyczyścić niezarządzane zasoby w C # [duplikat]
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 here
jak chcę, aby a
obiekt został zniszczony lub usunięty i zwolniony jest jego przydzielona pamięć.
Odpowiedzi
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 a
w Twoim przykładzie, i zwolni zajmowane przez nich miejsce. Zobaczy wtedy, że elementy wewnętrzne programu a
ró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 Dispose
jawnie lub użyć using
bloków, aby to zrobić. Możesz również zaimplementować finalizator, który zostanie wykonany, gdy a
zostanie usunięty. Ale wygląda na to, że nie o to pytałeś.