Analizowanie użycia pamięci przy użyciu narzędzia alokacji obiektów platformy .NET
Możesz zobaczyć, ile pamięci używa aplikacja i jakie ścieżki kodu przydzielają najwięcej pamięci przy użyciu narzędzia alokacji obiektów platformy .NET.
Po uruchomieniu narzędzia można zobaczyć ścieżki wykonywania funkcji, w których są przydzielane obiekty. Następnie możesz prześledzić z powrotem do katalogu głównego drzewa wywołań, który zajmuje największą ilość pamięci.
Aby zapoznać się z samouczkiem pokazującym, jak poprawić wydajność przy użyciu narzędzia alokacji obiektów platformy .NET, zobacz Analiza przypadku: Przewodnik dla początkujących dotyczący optymalizowania kodu.
Ustawienia
Wybierz pozycję Alt+F2 , aby otworzyć profilera wydajności w programie Visual Studio.
Zaznacz pole wyboru Śledzenie alokacji obiektów platformy .NET.
Wybierz przycisk Start, aby uruchomić narzędzie.
Jeśli włączysz opcję Rozpocznij od kolekcji wstrzymanej przed uruchomieniem profilera, dane nie będą zbierane do momentu wybrania przycisku Rekord w widoku sesji diagnostycznej.
Po uruchomieniu narzędzia przejdź do scenariusza, który chcesz profilować w aplikacji. Następnie wybierz pozycję Zatrzymaj zbieranie lub zamknij aplikację, aby wyświetlić dane.
Wybierz kartę Alokacja . Dane alokacji pamięci podobne do poniższych.
Teraz można analizować alokację pamięci obiektów.
Podczas zbierania narzędzie do śledzenia może spowolnić profilowane aplikacje. Jeśli wydajność narzędzia do śledzenia lub aplikacji jest niska, a jeśli nie musisz śledzić każdego obiektu, możesz dostosować częstotliwość próbkowania. W tym celu wybierz symbol koła zębatego obok narzędzia do śledzenia na stronie podsumowania profilera.
Dostosuj częstotliwość próbkowania do żądanej szybkości. Ta zmiana pomaga przyspieszyć wydajność aplikacji podczas zbierania i analizy.
Aby uzyskać więcej informacji na temat zwiększenia wydajności narzędzia, zobacz Optymalizowanie ustawień profilera.
Poznaj swoje dane
W poniższym widoku graficznym górny wykres przedstawia liczbę obiektów na żywo w aplikacji. Dolny wykres różnicowy obiektu przedstawia procentową zmianę obiektów aplikacji. Czerwone paski oznaczają, kiedy miało miejsce odzyskiwanie pamięci.
Dane tabelaryczne można filtrować, aby wyświetlić działanie tylko dla określonego zakresu czasu, wybierając zakres czasu. Gdy to zrobisz, informacje wyświetlane na kartach są ograniczone do filtrowanego zakresu czasu.
Możesz również powiększać wykres lub z tego wykresu.
Alokacja
Widok Alokacja przedstawia lokalizację obiektów przydzielających pamięć i ilość pamięci przydzielanej przez te obiekty.
W widoku Alokacja są wyświetlane następujące informacje:
Kolumna Typ to lista klas i struktur, które zajmują pamięć. Kliknij dwukrotnie typ, aby wyświetlić jego backtrace jako odwrócone drzewo wywołań. Tylko w widoku Alokacja można zobaczyć elementy w wybranej kategorii, które zajmują pamięć.
Kolumna Alokacje zawiera liczbę obiektów, które zajmują pamięć w określonym typie alokacji lub funkcji. Ta kolumna jest wyświetlana tylko w widokach Alokacja, Drzewo wywołań i Funkcje.
Kolumny Bajty i Średni rozmiar (bajty) nie są domyślnie wyświetlane. Aby je wyświetlić, kliknij prawym przyciskiem myszy kolumnę Typ lub Alokacje, a następnie wybierz opcje Bajty i Średni rozmiar (bajty), aby dodać je do wykresu.
Dwie kolumny są podobne do total (Allocations) i Self (Allocations), z wyjątkiem ilości pamięci zajętej zamiast liczby obiektów, które zajmują pamięć. Te kolumny są wyświetlane tylko w widoku Alokacja.
Kolumna Nazwa modułu zawiera moduł zawierający wywoływaną funkcję lub proces.
Wszystkie te kolumny można sortować. W kolumnach Typ i Nazwa modułu można sortować elementy alfabetycznie w kolejności rosnącej lub malejącej. W przypadku alokacji, bajtów i średniego rozmiaru (bajtów) można sortować elementy przez zwiększenie lub zmniejszenie wartości liczbowej.
Symbole
Na kartach Alokacja, Drzewo wywołań i Funkcje są wyświetlane następujące symbole:
- Typ wartości, taki jak liczba całkowita
- Kolekcja typu wartości, na przykład tablica liczb całkowitych
- Typ odwołania, taki jak ciąg
- Kolekcja typu odwołania, na przykład tablica ciągów
Drzewo wywołań
Widok Drzewo wywołań przedstawia ścieżki wykonywania funkcji, które zawierają obiekty przydzielające dużo pamięci.
Następujące informacje są wyświetlane w widoku Drzewa wywołań:
- Kolumna Nazwa funkcji zawiera proces lub nazwę funkcji zawierającej obiekty, które przydzielają pamięć. Ekran jest oparty na poziomie badanego węzła.
- Kolumny Total (Allocations) i Total Size (Bytes) zawierają liczbę przydzielonych obiektów oraz ilość pamięci używanej przez funkcję i wszystkie inne wywoływane przez nią funkcje. Kolumna Total Size (Bytes) jest domyślnie ukryta.
- Kolumny Self (Allocations) i Self-Size (Bajty) pokazują liczbę przydzielonych obiektów i ilość pamięci używanej przez pojedynczą wybraną funkcję lub typ alokacji.
- Kolumna Average Size (Bytes) zawiera te same informacje, co w widoku Alokacje . Ta kolumna jest domyślnie ukryta.
- Kolumna Nazwa modułu zawiera moduł zawierający wywoływaną funkcję lub proces.
Dodatkowe opcje wyświetlane w widoku Drzewa wywołań obejmują:
- Przycisk Rozwiń ścieżkę gorącą wyróżnia ścieżkę wykonywania funkcji zawierającą wiele obiektów przydzielających pamięć. Algorytm rozpoczyna się od wybranego węzła i wyróżnia ścieżkę większości alokacji, prowadząc Cię do badania.
- Przycisk Pokaż ścieżkę gorącą pokazuje lub ukrywa symbole płomienia wskazujące, które węzły są częścią ścieżki gorącej.
Funkcje
Widok Funkcje zawiera procesy, moduły i funkcje przydzielające pamięć.
Informacje wyświetlane w widoku funkcje obejmują:
Kolumna Nazwa zawiera procesy jako węzły najwyższego poziomu. Poniżej znajdują się moduły, a pod modułami znajdują się funkcje.
Następujące kolumny, które pokazują te same informacje, co w widokach drzewa Alokacja i Wywołanie:
- Suma (alokacje)
- Self (Alokacje)
- Całkowity rozmiar (bajty)
- Rozmiar własny (bajty)
- Średni rozmiar (bajty)
Kolekcja
Widok Kolekcja pokazuje, ile obiektów zostało zebranych lub zachowanych podczas odzyskiwania pamięci.
Poniższe informacje są wyświetlane w widoku Kolekcja .
- W kolumnie GC jest wyświetlany identyfikator tego odzyskiwania pamięci w cyklu życia pliku wykonywalnego.
- W kolumnie Generacja jest wyświetlana wartość Generowanie odzyskiwania pamięci.
- W kolumnie Typ GC jest wyświetlany typ tego odzyskiwania pamięci.
- W kolumnie Przyczyna GC jest wyświetlana przyczyna tego zdarzenia odzyskiwania pamięci.
- W kolumnie Wstrzymaj czas trwania jest wyświetlany czas, który został zablokowany, ponieważ moduł odśmiecywania pamięci wymaga wyłącznego użycia sterta. W przypadku odzyskiwania pamięci w tle ta wartość jest mała.
- W kolumnie Rozmiar LOH jest wyświetlany rozmiar sterty dużych obiektów po uruchomieniu modułu odśmiecenia pamięci.
- W kolumnie Rozmiar poH pokazano rozmiar przypiętego sterty obiektu po uruchomieniu modułu odśmiecania pamięci.
- Kolumna Finalizable Surv (MB) zawiera liczbę MB obiektów, które mają finalizatory (destruktory), które przetrwały odzyskiwanie pamięci.
- Kolumna Przypięte obiekty zawiera liczbę przypiętych obiektów, które są promowane przez odzyskiwanie pamięci.
- Kolumna Collected (Zebrane) zawiera liczbę obiektów zebranych przez moduł odśmieceń pamięci.
- Kolumna Survived zawiera liczbę obiektów, które przetrwały po uruchomieniu modułu odśmiecającego śmieci.
Po wybraniu wiersza ten widok pokazuje również wykresy kołowe w celu wizualizacji zebranych i przetrwanych obiektów według typu.
Narzędzia filtrowania
Wszystkie widoki Alokacje, Drzewo wywołań i Funkcje zawierają opcje Pokaż tylko mój kod i Pokaż kod macierzysty oraz pole filtru.
- Pokaż tylko mój kod zwija systemy, struktury i inny kod nieużytkownika w ramkach [Kod zewnętrzny], aby można było skoncentrować się tylko na swoim kodzie. Aby uzyskać więcej informacji, zobacz Debugowanie kodu użytkownika za pomocą funkcji Just My Code.
- Pokaż kod natywny pokazuje kod natywny w obiekcie docelowym analizy i może zawierać kod nieużytkownika.
- W polu filtru można filtrować kolumnę Nazwa lub Nazwa funkcji na podstawie podanej wartości. Wprowadź wartość ciągu w polu . Następnie tabela zawiera tylko typy zawierające ten ciąg.