Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aby odzyskać obiekty, moduł odśmiecania pamięci (GC) musi zatrzymać wszystkie wątki wykonawcze w aplikacji. Okres, w którym moduł odśmiecywania pamięci jest aktywny, jest określany jako jego opóźnienie.
W niektórych przypadkach, takich jak gdy aplikacja pobiera dane lub wyświetla zawartość, pełne czyszczenie pamięci może wystąpić w krytycznym momencie i obniżać wydajność. Możesz dostosować natrętność modułu odśmiecającego śmieci, ustawiając GCSettings.LatencyMode właściwość na jedną z System.Runtime.GCLatencyMode wartości.
Ustawienia małych opóźnień
Użycie ustawienia "niskiego" opóźnienia oznacza, że moduł odśmiecania mniej ingeruje w aplikację. Odzyskiwanie pamięci jest bardziej konserwatywne w kwestii odzyskiwania pamięci.
Wyliczenie System.Runtime.GCLatencyMode zapewnia dwa ustawienia małych opóźnień:
GCLatencyMode.LowLatency pomija kolekcje generacji 2 i wykonuje tylko kolekcje generacji 0 i 1. Można go używać tylko przez krótki czas. Przez dłuższe okresy czasu, jeśli system jest pod presją pamięci, garbage collector zainicjuje proces oczyszczania, co może krótko wstrzymać działanie aplikacji i zakłócić operację krytyczną czasowo. To ustawienie jest dostępne tylko dla odzyskiwania pamięci stacji roboczej.
GCLatencyMode.SustainedLowLatency pomija kolekcje generacji 2 na pierwszym planie i wykonuje tylko kolekcje generacji 0, 1 oraz kolekcje generacji 2 w tle. Może być używany przez dłuższy czas i jest dostępny zarówno dla stacji roboczej, jak i dla zbierania śmieci serwera. Tego ustawienia nie można użyć, jeśli odzyskiwanie pamięci w tle jest wyłączone.
Podczas okresów niskiej latencji kolekcje generacji 2 są pomijane, chyba że wystąpią następujące warunki:
System otrzymuje powiadomienie o niskiej ilości pamięci z systemu operacyjnego.
Kod aplikacji wywołuje kolekcję, wywołując GC.Collect metodę i określając 2 dla parametru
generation.
Scenariusze
W poniższej tabeli wymieniono scenariusze aplikacji dotyczące używania GCLatencyMode wartości:
| Tryb opóźnienia | Scenariusze aplikacji |
|---|---|
| Batch | W przypadku aplikacji, które nie mają interfejsu użytkownika ani operacji po stronie serwera. Gdy zarządzanie pamięcią w tle jest wyłączone, jest to tryb domyślny dla zarządzania pamięcią stacji roboczej i serwera. Batch tryb zastępuje również ustawienie gcConcurrent , czyli uniemożliwia tworzenie kolekcji w tle lub współbieżnych. |
| Interactive | W przypadku większości aplikacji, które mają interfejs użytkownika. Jest to tryb domyślny dla stacji roboczej i odzyskiwania pamięci serwera. Jeśli jednak aplikacja jest hostowana, ustawienia modułu odśmiecenia pamięci procesu hostingu mają pierwszeństwo. |
| LowLatency | W przypadku aplikacji, które mają krótkoterminowe, wrażliwe na czas operacje, podczas których przerwy w działaniu kolektora śmieci mogą zakłócić działanie. Na przykład aplikacje renderujące animacje lub funkcje pozyskiwania danych. |
| SustainedLowLatency | W przypadku aplikacji, które mają operacje wrażliwe na czas przez ograniczony, ale potencjalnie dłuższy okres, w trakcie którego przerwy powodowane przez odśmiecacz pamięci mogą być problematyczne. Na przykład aplikacje, które wymagają szybkich czasów odpowiedzi w miarę zmian danych rynkowych w godzinach handlu. Ten tryb powoduje, że rozmiar zarządzanej sterty jest większy niż w przypadku innych trybów. Ponieważ nie kompaktuje zarządzanej sterty, możliwa jest większa fragmentacja. Upewnij się, że jest dostępna wystarczająca ilość pamięci. |
Wskazówki dotyczące używania małych opóźnień
W przypadku korzystania z trybu GCLatencyMode.LowLatency należy wziąć pod uwagę następujące wskazówki:
Utrzymaj czas z małym opóźnieniem jak najkrótszy.
Unikaj przydzielania dużej ilości pamięci w okresach małych opóźnień. Powiadomienia o małej ilości pamięci mogą wystąpić, ponieważ proces oczyszczania pamięci odzyskuje mniej obiektów.
W trybie małych opóźnień zminimalizuj liczbę nowych alokacji, w szczególności alokacje na dużą stertę obiektów i przypięte obiekty.
Należy pamiętać o wątkach, które mogą być przydzielane. Ponieważ ustawienie właściwości obowiązuje w całym procesie, wyjątki mogą być generowane w dowolnym wątku dokonującym alokacji.
Umieść kod o małych opóźnieniach w ograniczonych regionach wykonania. Aby uzyskać więcej informacji, zobacz Ograniczone regiony wykonywania.
W okresie niskiej latencji można wymusić kolekcje generacji 2, wywołując metodę GC.Collect(Int32, GCCollectionMode).