Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W przypadku kolekcji śmieci w tle (GC) generacje efemeryczne (0 i 1) są zbierane w razie potrzeby, podczas gdy zbieranie generacji 2 jest w toku. Odzyskiwanie pamięci w tle (tzw. garbage collection) jest wykonywane na jednym lub kilku dedykowanych wątkach, w zależności od tego, czy chodzi o GC na stacji roboczej, czy serwerze, i dotyczy tylko kolekcji generacji 2.
Odzyskiwanie pamięci w tle jest domyślnie włączone. Można ją włączyć lub wyłączyć za pomocą ustawienia konfiguracji gcConcurrent w aplikacjach .NET Framework lub ustawieniu System.GC.Concurrent w aplikacjach .NET Core i .NET 5 lub nowszych.
Uwaga / Notatka
Odzyskiwanie pamięci w tle zastępuje współbieżne odzyskiwanie pamięci i jest dostępne w programie .NET Framework 4 i nowszych wersjach. W programie .NET Framework 4 jest obsługiwana tylko dla kolekcji śmieci stacji roboczej. Począwszy od programu .NET Framework 4.5, odzyskiwanie pamięci w tle jest dostępne zarówno dla stacji roboczej , jak i odzyskiwania pamięci serwera .
Kolekcja efemerycznej generacji podczas odzyskiwania pamięci w tle jest znana jako odzyskiwanie pamięci pierwszego planu . Kiedy występują zbiórki śmieci pierwszoplanowe, wszystkie zarządzane wątki są zawieszane.
Gdy zbieranie śmieci w tle jest w toku i przydzielono wystarczającą liczbę obiektów w generacji 0, CLR wykonuje zbieranie śmieci w pierwszym planie generacji 0 lub generacji 1. Dedykowany wątek kolekcji śmieci w tle często sprawdza w bezpiecznych punktach, czy istnieje żądanie kolekcji śmieci na pierwszym planie. Jeśli tak jest, kolekcja w tle zawiesza się sama, aby proces odzyskiwania pamięci na pierwszym planie mógł się odbyć. Po zakończeniu zbierania śmieci na pierwszym planie dedykowane wątki zbierania śmieci w tle i wątki użytkownika zostaną wznowione.
Zbieranie śmieci w tle usuwa ograniczenia alokacji nałożone przez współbieżne zbieranie śmieci, ponieważ przejściowe kolekcje śmieci mogą wystąpić podczas zbierania śmieci w tle. Zarządzanie pamięcią w tle może usuwać martwe obiekty w młodszych pokoleniach. Może również rozszerzyć stertę w razie potrzeby podczas kolekcji śmieci generacji 1.
Stacja robocza w tle a serwer GC
Począwszy od programu .NET Framework 4.5, odzyskiwanie pamięci w tle jest dostępne dla serwera GC. Domyślnym trybem dla serwerowego odzyskiwania pamięci jest Background GC.
Odzyskiwanie pamięci serwera w tle działa podobnie do odzyskiwania pamięci stacji roboczej w tle, ale istnieje kilka różnic:
Odzyskiwanie pamięci stacji roboczej w tle używa jednego dedykowanego wątku odzyskiwania pamięci w tle, podczas gdy odzyskiwanie pamięci serwera w tle używa wielu wątków. Zazwyczaj istnieje dedykowany wątek dla każdego procesora logicznego.
W przeciwieństwie do wątku odzyskiwania pamięci w tle na stacji roboczej, wątki GC serwera działające w tle nie wygasają.
Na poniższej ilustracji przedstawiono odśmiecanie pamięci środowiska stacji roboczej wykonywane w tle w osobnym dedykowanym wątku.
Poniższa ilustracja pokazuje odzyskiwanie pamięci serwera w tle, które jest wykonywane na osobnych, dedykowanych wątkach.
Równoczesna kolekcja śmieci
Wskazówka
Ta sekcja dotyczy:
- Program .NET Framework 3.5 i starsze wersje dla odzyskiwania pamięci stacji roboczej
- Program .NET Framework 4 i starsze wersje na potrzeby odzyskiwania pamięci serwera
Współbieżne odśmiecanie pamięci jest zastępowane przez odśmiecanie pamięci w tle w nowszych wersjach.
W przypadku stacji roboczej lub serwera odzyskiwania pamięci można włączyć współbieżne odzyskiwanie pamięci, co umożliwia jednoczesne uruchamianie wątków z dedykowanym wątkiem, który wykonuje odzyskiwanie pamięci przez większość czasu trwania odzyskiwania pamięci. Ta opcja ma wpływ tylko na zbieranie śmieci w generacji 2; generacje 0 i 1 są zawsze niejednoczesne, ponieważ kończą się szybko.
Współbieżne odzyskiwanie pamięci umożliwia interaktywnym aplikacjom bardziej dynamiczne reagowanie dzięki minimalizowaniu pauz podczas zbierania. Zarządzane wątki mogą przez większość czasu nadal działać, podczas gdy uruchomiony jest współbieżny wątek zbierania śmieci. Ten projekt powoduje krótsze przerwy podczas procesu zbierania śmieci.
Współbieżne odzyskiwanie pamięci jest wykonywane na dedykowanym wątku. Domyślnie clR uruchamia odzyskiwanie pamięci stacji roboczej z równoczesnym odzyskiwaniem pamięci włączone na komputerach z jednym procesorem i wieloma procesorami.
Na poniższej ilustracji przedstawiono współbieżne zbieranie śmieci wykonywane w osobnym dedykowanym wątku.