Dziennikarz zapytał mnie o to dzisiaj ... czy jest na to odpowiedź?
Dziennikarz zapytał mnie o to dzisiaj ... czy jest na to odpowiedź?
Odpowiedzi:
System.GC.Collect()wymusza działanie garbage collectora. Nie jest to zalecane, ale można z niego skorzystać w przypadku zaistnienia sytuacji.
Nie jest zalecane jawne wywoływanie gc, ale jeśli wywołujesz
GC.Collect();
GC.WaitForPendingFinalizers();
Wywoła GC jawnie w całym kodzie, nie zapomnij wywołać GC.WaitForPendingFinalizers();po GC.Collect().
WaitForPendingFinalizersniekoniecznie zapewnia „lepszą wydajność”: po prostu blokuje, dopóki wszystkie obiekty w kolejce finalizacji nie zostaną sfinalizowane (obiekty, które mogły zostać tam umieszczone przez poprzednie wywołanie Collect). Jeśli chcesz mieć szansę na zebranie tych obiektów, po wywołaniu potrzebujesz kolejnego połączenia . Collect WaitForPendingFinalizers
WaitForPendingFinalizers?
GC.Collect()
z MDSN ,
Użyj tej metody, aby spróbować odzyskać całą niedostępną pamięć.
Wszystkie obiekty, niezależnie od tego, jak długo były w pamięci, są brane pod uwagę do kolekcji; Jednak obiekty, do których istnieją odwołania w kodzie zarządzanym, nie są zbierane. Użyj tej metody, aby wymusić na systemie próbę odzyskania maksymalnej ilości dostępnej pamięci.
Pamiętaj jednak, że Garbage Collector może nie zawsze wyczyścić to, czego oczekujesz ...
Nie chcesz zmuszać modułu odśmiecania pamięci do działania.
Jeśli jednak kiedykolwiek to zrobiłeś (jako ćwiczenie czysto akademickie):
GC.Collect()
Myślę, że .Net Framework robi to automatycznie, ale na wszelki wypadek. Najpierw upewnij się, że wybrałeś to, co chcesz wymazać, a następnie zadzwoń do garbage collectora:
randomClass object1 = new randomClass
...
...
// Give a null value to the code you want to delete
object1 = null;
// Then call the garbage collector to erase what you gave the null value
GC.Collect();
Myślę, że to wszystko… Mam nadzieję, że komuś pomogę.