DA0024: Czas Procesora GC nadmierne
Identyfikator reguły |
DA0024 |
Kategoria |
Użycie .NET Framework |
Metoda profilowania |
Wszystkie |
Wiadomość |
% Czasu w GC jest bardzo wysoki.Nadmierny narzut odzyskiwania pamięci. |
Typ reguły |
Ostrzeżenie |
Podczas profilowania metodami próbkowania, pamięci .NET lub metody rywalizacji o zasoby, należy zebrać co najmniej 10 próbek, aby wywołać regułę.
Przyczyna
Dane wydajności systemu, zebrane podczas profilowania wskazują, że ilość czasu spędzonego przy odzyskiwaniu pamięci jest nadmiernie wysoka w porównaniu z całkowitym czasem przetwarzania aplikacji.
Opis reguły
Środowisko uruchomieniowe języka wspólnego (CLR) Microsoft .NET udostępnia mechanizm automatycznego zarządzania pamięcią, który używa modułu wyrzucania elementów bezużytecznych do odzyskiwania pamięci z obiektów, które nie są już używane przez aplikację.Moduł zbierający elementy bezużyteczne jest zorientowany na generowanie, oparte na założeniu, że wiele alokacji jest krótkotrwałych.Na przykład zmienne lokalne powinny być krótkotrwałe.Nowo utworzone obiekty rozpoczynają w generacji 0 (gen 0), a następnie przechodzą do generacji 1, kiedy przetrwają działanie modułu zbierania elementów bezużytecznych, a na końcu przechodzą do generacji 2 jeśli aplikacja nadal ich używa.
Obiekty generacji 0 są często zbierane, zazwyczaj bardzo wydajnie.Obiekty generacji 1 są zbierane rzadziej i mniej wydajnie.Wreszcie długotrwałe obiekty generacji 2 powinny być zbierane nawet rzadziej.Zbieranie generacji 2 jest pełnym przebiegiem modułu zbierania elementów bezużytecznych, jest także operacją najbardziej kosztowną.
Ta reguła jest uruchamiana, gdy czas spędzony przy odzyskiwaniu pamięci jest nadmiernie wysoki w porównaniu do całkowitego czasu przetwarzania aplikacji.
[!UWAGA]
Kiedy czas spędzony przy odzyskiwaniu pamięci jest znaczny, ale nie nadmierny w porównaniu z całkowitym czasem przetwarzania aplikacji, uruchamiane jest ostrzeżenie DA0023: Czas Procesora GC wysokiej, zamiast tej reguły.
Jak badać ostrzeżenie
Kliknij dwukrotnie wiadomość w oknie Lista błędów, przejdź do danych profilowania Wyświetlanie znaków.Znajdź kolumnę .NET CLR Memory\% Time in GC.Określ, czy istnieją specyficzne fazy wykonania programu, gdzie narzut pamięci zarządzanej modułu zbierania elementów bezużytecznych jest większy niż w innych fazach.Porównaj wartości % Czasu w GC do wskaźnika odzyskiwania pamięci raportowanego w wartościach # odzyskiwanie Gen 0, # odzyskiwanie Gen 1, # odzyskiwanie Gen 3.
Wartość % Czasu w GC próbuje zgłosić wartość licznika czasu, który aplikacja spędza na wykonywaniu odzyskiwania pamięci proporcjonalnie do całkowitego czasu przetwarzania.Należy pamiętać, że istnieją okoliczności, gdy wartość % Czasu w GC zgłasza bardzo wysoką wartość, ale nie z powodu nadmiernego odzyskiwania pamięci.Aby uzyskać więcej informacji o sposobie obliczania wartośći % Czasu w GC, zobacz wpis Difference Between Perf Data Reported by Different Tools – 4 na blogu Maoni's Weblog w witrynie MSDN.Jeśli występują błędy stron lub aplikacja jest zastępowana przez inną o wyższym priorytecie podczas operacji wyrzucania elementów bezużytecznych, licznik % Czasu w GC będzie odzwierciedlać te dodatkowe opóźnienia.