W większości przypadków moduł odśmiecenia pamięci może określić najlepszy czas na wykonanie kolekcji i należy zezwolić na jego uruchamianie niezależnie. Występują rzadkie sytuacje, w których wymuszona kolekcja może poprawić wydajność aplikacji. W takich przypadkach można wywołać odzyskiwanie pamięci przy użyciu GC.Collect metody wymuszenia odzyskiwania pamięci.
GC.Collect Użyj metody, gdy w kodzie aplikacji występuje znaczne zmniejszenie ilości pamięci używanej w określonym punkcie. Jeśli na przykład aplikacja używa złożonego okna dialogowego z kilkoma kontrolkami, wywołanie Collect okna dialogowego po zamknięciu okna dialogowego może poprawić wydajność przez natychmiastowe odzyskanie pamięci używanej przez okno dialogowe. Upewnij się, że aplikacja nie generuje zbyt często odzyskiwania pamięci, ponieważ może to zmniejszyć wydajność, jeśli moduł odśmiecania pamięci próbuje odzyskać obiekty w nie optymalnych czasach. Możesz podać GCCollectionMode.Optimized wartość wyliczenia do Collect metody , aby zebrać tylko wtedy, gdy kolekcja będzie wydajna, zgodnie z opisem w następnej sekcji.
Tryb zbierania GC
Możesz użyć jednego z GC.Collect przeciążeń metody, które zawiera GCCollectionMode wartość, aby określić zachowanie dla wymuszonej kolekcji w następujący sposób.
Wymusza natychmiastowe odzyskiwanie pamięci. Jest to równoważne wywołaniu GC.Collect() przeciążenia. Powoduje to pełną blokadę kolekcji wszystkich pokoleń.
Umożliwia modułowi odśmieceń pamięci określenie, czy bieżący czas jest optymalny do odzyskania obiektów.
Moduł odśmiecania pamięci może określić, że kolekcja nie byłaby wystarczająco wydajna, aby była uzasadniona, w takim przypadku zostanie zwrócona bez odzyskiwania obiektów.
Kolekcje w tle lub blokujące
Można wywołać GC.Collect(Int32, GCCollectionMode, Boolean) przeciążenie metody, aby określić, czy kolekcja indukowana blokuje, czy nie. Typ wykonywanej kolekcji zależy od kombinacji parametrów i blocking metodymode. mode jest elementem członkowskim GCCollectionMode wyliczenia i blocking jest wartością Boolean . W poniższej tabeli przedstawiono podsumowanie interakcji argumentów mode i blocking .
Kolekcja blokująca jest wykonywana tak szybko, jak to możliwe. Jeśli kolekcja w tle jest w toku, a generowanie wynosi 0 lub 1, Collect(Int32, GCCollectionMode, Boolean) metoda natychmiast wyzwala blokującą kolekcję i zwraca wartość po zakończeniu kolekcji. Jeśli kolekcja w tle jest w toku, a generation parametr ma wartość 2, metoda czeka na zakończenie kolekcji w tle, wyzwala blokującą kolekcję generacji 2, a następnie zwraca wartość.
Kolekcja jest wykonywana tak szybko, jak to możliwe. Metoda Collect(Int32, GCCollectionMode, Boolean) żąda kolekcji w tle, ale nie jest to gwarantowane. W zależności od okoliczności może być nadal wykonywana blokada kolekcji. Jeśli kolekcja w tle jest już w toku, metoda zwraca natychmiast.
Może zostać wykonana kolekcja blokująca w zależności od stanu modułu odśmiecenia pamięci i parametru generation . Moduł odśmiecający elementy bezużyteczne próbuje zapewnić optymalną wydajność.
Można wykonać kolekcję w zależności od stanu modułu odśmiecenia pamięci. Metoda Collect(Int32, GCCollectionMode, Boolean) żąda kolekcji w tle, ale nie jest to gwarantowane. W zależności od okoliczności może być nadal wykonywana blokada kolekcji. Moduł odśmiecający elementy bezużyteczne próbuje zapewnić optymalną wydajność. Jeśli kolekcja w tle jest już w toku, metoda zwraca natychmiast.
Źródło tej zawartości można znaleźć w witrynie GitHub, gdzie można również tworzyć i przeglądać problemy i żądania ściągnięcia. Więcej informacji znajdziesz w naszym przewodniku dla współtwórców.
Opinia o produkcie .NET
.NET to projekt typu open source. Wybierz link, aby przekazać opinię:
Dołącz do serii meetup, aby tworzyć skalowalne rozwiązania sztucznej inteligencji oparte na rzeczywistych przypadkach użycia z innymi deweloperami i ekspertami.