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ć do korzenia drzewa wywołań, który zajmuje najwięcej pamięci.
Aby zapoznać się z samouczkiem pokazującym, jak zwiększyć 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 Alt+F2, aby otworzyć profilera wydajności w programie Visual Studio.
Zaznacz pole wyboru śledzenie alokacji obiektów platformy .NET.
Wybierz przycisk Uruchom, aby uruchomić narzędzie.
Jeśli włączysz opcję Rozpocznij od wstrzymania zbierania przed uruchomieniem profilera, dane nie będą zbierane do momentu wybrania przycisku Nagraj w widoku sesji diagnostycznej.
Po uruchomieniu narzędzia przejdź do scenariusza, który chcesz profilować w swojej aplikacji. Następnie wybierz pozycję Zatrzymaj zbieranie lub zamknij aplikację, aby wyświetlić dane.
Zatrzymaj kolekcję
Wybierz kartę Alokacja. Wyświetlane są 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ć profilowaną aplikację. 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 na stronie podsumowania profilera wybierz symbol koła zębatego obok narzędzia do śledzenia.
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.
Zrozum swoje dane
W poniższym widoku graficznym górny wykres przedstawia liczbę obiektów na żywo w aplikacji. Dolny wykres delta obiekty pokazuje procentową zmianę obiektów aplikacji. Czerwone paski oznaczają, kiedy miała miejsce zbiórka śmieci.
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ć lub pomniejszać wykres.
Przydział
Widok Allocation pokazuje lokalizację obiektów przydzielających pamięć i ilość pamięci przydzielanej przez te obiekty.
Następujące informacje są wyświetlane w widoku Alokacja:
Kolumna Type to lista klas i struktur, które zajmują pamięć. Kliknij dwukrotnie typ, aby wyświetlić jego ślad wywołań jako odwrócone drzewo wywołań. Tylko w widoku Alokacja można wyświetlić elementy w wybranej kategorii, które zajmują pamięć.
W kolumnie Allocations przedstawiono liczbę obiektów, które zajmują pamięć w określonym typie alokacji lub funkcji. Ta kolumna jest wyświetlana tylko w widokach Allocation, Call Treeoraz Functions.
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 Bajty i Średni rozmiar (Bajty), aby dodać je do wykresu.
Dwie kolumny są podobne do total (Allocations) i Self (Allocations), z wyjątkiem tego, że pokazują ilość pamięci zajętej zamiast liczby obiektów, które zajmują pamięć. Te kolumny są wyświetlane tylko w widoku alokacji.
Kolumna Module name pokazuje moduł, który zawiera funkcję lub proces wykonujący wywołanie.
Wszystkie te kolumny można sortować. W przypadku kolumn Type i Module Name można sortować elementy alfabetycznie w kolejności rosnącej lub malejącej. W przypadku Alokacje, Bajty i średni rozmiar (bajty), można sortować elementy według rosnącej lub malejącej wartości liczbowej.
Symbole
Następujące symbole są wyświetlane na kartach Allocation, Call Treei Functions:
- 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 referencyjnego, jak tablica łańcuchów
Drzewo wywołań
Widok drzewa wywołań pokazuje ścieżki wykonywania funkcji zawierające 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 (Bajty) pokazują liczbę przydzielonych obiektów oraz ilość pamięci używanej przez funkcję i wszystkie inne wywoływane przez nią funkcje. Kolumna łącznego rozmiaru (bajtów) 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 Średni Rozmiar (Bajty) pokazuje te same informacje, co w widoku Alokacje. Ta kolumna jest domyślnie ukryta.
- Kolumna Module name pokazuje moduł zawierający funkcję lub proces, który wykonuje wywołanie.
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 działanie od wybranego węzła i wyróżnia ścieżkę z największą liczbą alokacji, wspomagając Cię w prowadzeniu analizy.
- 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 Functions przedstawia procesy, moduły i funkcje przydzielające pamięć.
Informacje wyświetlane w widoku usługi Functions obejmują:
Kolumna Nazwa pokazuje procesy jako węzły najwyższego stopnia. Pod procesami znajdują się moduły, a pod modułami funkcje.
Następujące kolumny, które pokazują te same informacje co w widokach Alokacja i drzewa wywołań :
- Łączne (alokacje)
- self (alokacje)
- łączny rozmiar (bajty)
- rozmiaru samodzielnego (bajtów)
- Średni rozmiar (bajty)
Kolekcja
Widok kolekcji pokazuje, ile obiektów zostało zebranych lub zachowanych podczas odzyskiwania pamięci.
Poniższe informacje są wyświetlane w widoku kolekcji.
- Kolumna GC pokazuje identyfikator tego zbierania śmieci w cyklu życia pliku wykonywalnego.
- W kolumnie Generation jest wyświetlana kolumna Generowanie odzyskiwania pamięci.
- W kolumnie GC Type jest wyświetlany typ tego zebrania pamięci.
- W kolumnie GC Reason jest wyświetlana przyczyna tego procesu czyszczenia pamięci.
- Kolumna Wstrzymaj czas trwania pokazuje czas, przez który wykonywanie zostało zablokowane, ponieważ moduł odśmiecywania pamięci wymaga wyłącznego użycia sterta. W przypadku odzyskiwania pamięci w tle ta wartość jest mała.
- Kolumna Rozmiar LOH pokazuje rozmiar sterty dużego obiektu po uruchomieniu kolektora śmieci.
- W kolumnie rozmiar stosu obiektu pokazano rozmiar przypiętego stosu obiektu po uruchomieniu garbage collectora.
- Kolumna Finalizable Surv (MB) pokazuje liczbę MB obiektów, które mają finalizatory (destruktory) i przetrwały proces odzyskiwania pamięci.
- Kolumna Przypięte obiekty pokazuje liczbę przypiętych obiektów, które ta kolekcja śmieci awansowała.
- W kolumnie Collected jest wyświetlana liczba obiektów zebranych przez zbieracz śmieci.
- W kolumnie Survived przedstawiono liczbę obiektów, które przetrwały po uruchomieniu mechanizmu zbierania śmieci.
Po wybraniu wiersza widok ten pokazuje również wykresy kołowe do wizualizacji zebranych i przetrwanych obiektów według typu.
Narzędzia filtrowania
Widoki Allocations, Call Treeoraz Functions zawierają opcje Pokaż tylko mój kod i Pokaż kod natywny oraz pole filtru.
- Pokaż tylko mój kod zwija systemy, frameworki i inny kod nieużytkownika w [Kod zewnętrzny] ramki, abyś mógł skupić się wyłącznie na swoim kodzie. Aby uzyskać więcej informacji, zobacz Debugowanie kodu użytkownika za pomocą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.