Udostępnij za pośrednictwem


DA0021: Wysoki stopień kolekcji garbage Gen 1

Identyfikator reguły

DA0021

Kategoria

.NET Framework użycia

Metod profilowania

Wszystkie

Wiadomości

Istnieje stosunkowo wysokie stawki kolekcji garbage Gen 1 występujących.Jeżeli, zgodnie z projektem, większość struktur danych programu są przydzielane i zachowywane przez długi czas, to nie jest zwykle problem.Jednakże jeśli to zachowanie jest niezamierzone, aplikacja może przypinanie obiektów.Jeśli nie masz pewności, można zebrać.NET pamięci danych i obiektów istnienia informacje o alokacji zrozumieć deseń alokacji pamięci używanych przez aplikację.

Typ reguły

Informacje

Gdy profil za pomocą pobierania próbek.NET pamięci lub zasobów metody rywalizacji, musi zebrać co najmniej 10 próbek, aby wyzwalać tę regułę.

Przyczyna

Dane wydajności systemu, które zostały zebrane podczas profilowania wskazują, że znaczna część pamięci dla.NET Framework obiektów został skorygowany za generation 1 wyrzucania elementów bezużytecznych generacji 0 danych kolekcji w porównaniu.

Opis reguły

Microsoft.NETTO wspólnej języka run-time (CLR) udostępnia mechanizm zarządzania automatyczne pamięci, który używa garbage collector w celu odzyskania pamięci od obiektów, nie są już wykorzystywane przez aplikację.Garbage collector jest zorientowana na generowanie oparte na założeniu, że wiele przydziałów są krótkotrwałe.Na przykład, zmiennych lokalnych, powinny być krótkotrwałej.Nowo utworzone obiekty Uruchom w generacji 0 (gen 0), a następnie postępu one generation 1, gdy one przetrwać wyrzucania elementów bezużytecznych uruchomić, a na końcu przejścia do generacji 2 Jeśli aplikacja nadal wykorzystuje je.

Obiekty generacji 0 są zbierane, często i zazwyczaj bardzo wydajne.Obiekty generacji 1 są zbierane, rzadziej i mniej wydajne.Wreszcie długim czasie połowicznego zaniku obiekty generacji 2 powinna być pobrana nawet rzadziej.Bezużytecznych generacji 2, czyli pełnego wyrzucania elementów bezużytecznych uruchomić również jest najbardziej kosztownych operacji.

Ta reguła pożary kiedy proporcjonalnie zbyt wiele generacji, które wystąpiły kolekcji 1 garbage.Jeśli zbyt wiele obiektów dość krótkotrwałe przetrwać bezużytecznych generacji 0, ale mogą następnie mają być zbierane w kolekcji generation 1, koszt zarządzania pamięcią może stać się nadmierne.Aby uzyskać więcej informacji, zobacz Mid-life kryzys post na Rico Mariani wydajności Tidbits w witrynie MSDN w sieci Web.

Jak do zbadania ostrzeżenie

Kliknij dwukrotnie wiadomość w oknie Lista błędów, aby przejść do Wyświetlanie znaków danych profilowania.Znajdź .NET CLR Memory\ # zbiorów Gen 0 i .NET CLR Memory\ # Gen 1 zbiorów kolumny.Ustalić, czy poszczególnych faz wykonywania programu gdzie wyrzucania elementów bezużytecznych występuje częściej.Porównać te wartości do % czas w GC kolumny, aby sprawdzić, jeśli deseń alokacje zarządzanej pamięci jest przyczyną ilość zajętej pamięci nadmiernego zarządzania.

Zrozumienie struktury zarządzanej pamięci aplikacji, profile je ponownie uruchomione alokacji pamięci a.NET pomiary okresu istnienia obiektu profile i żądania.

Aby uzyskać informacje na temat zwiększania wydajności kolekcji garbage, zobacz podstawy Garbage Collector i wskazówki dotyczące wydajności w witrynie firmy Microsoft w sieci Web.Informacje napowietrznej automatycznych operacji wyrzucania elementów bezużytecznych, zobacz Dużych niepokrytych sterty obiektu.