Udostępnij za pośrednictwem


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

  1. Wybierz Alt+F2, aby otworzyć profilera wydajności w programie Visual Studio.

  2. Zaznacz pole wyboru śledzenie alokacji obiektów platformy .NET.

    zrzut ekranu przedstawiający wybrane narzędzie Dotnet Object Allocation Tracking.

    Zrzut ekranu przedstawiający narzędzie Dotnet Object Allocation Tracking.

  3. 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.

  4. 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.

    Zrzut ekranu okna przedstawiającego zatrzymanie kolekcji.

    Zrzut ekranu przedstawiający okno z wyświetlonym zatrzymaniem kolekcji. Zatrzymaj kolekcję

  5. Wybierz kartę Alokacja. Wyświetlane są dane alokacji pamięci podobne do poniższych.

    Zrzut ekranu przedstawiający zakładkę

    zrzut ekranu przedstawiający zakładkę Alokacja.

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.

Zrzut ekranu przedstawiający ustawienia narzędzia Dotnet Allocation.

Zrzut ekranu przedstawiający ustawienia narzędzia Dotnet Allocation.

Dostosuj częstotliwość próbkowania do żądanej szybkości. Ta zmiana pomaga przyspieszyć wydajność aplikacji podczas zbierania i analizy.

Zrzut ekranu przedstawiający skorygowaną częstotliwość próbkowania.

Zrzut ekranu przedstawiający skorygowaną częstotliwość próbkowania.

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.

zrzut ekranu przedstawiający graf narzędzia Dotnet Allocation.

zrzut ekranu przedstawiający graf narzędzia Dotnet Allocation.

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.

Zrzut ekranu przedstawiający przefiltrowany wykres czasu alokacji Dotnet.

Zrzut ekranu przedstawiający wykres filtrowanego czasu alokacji Dotnet.

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.

Zrzut ekranu przedstawiający rozwinięty widok Przydziału.

Zrzut ekranu przedstawiający widok alokacji w trybie rozszerzonym.

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:

  • symbol typu wartości - typ wartości, taki jak liczba całkowita

  • symbol kolekcji typu wartości — kolekcja typu wartości, na przykład tablica liczb całkowitych

  • symbol typu odwołania — typ odwołania, taki jak ciąg

  • symbol kolekcji typu referencyjnego — 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.

zrzut ekranu przedstawiający widok Drzewa wywołań.

zrzut ekranu przedstawiający widok Drzewa wywołań.

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.

Zrzut ekranu przedstawiający rozwiniętą gorącą ścieżkę.

Zrzut ekranu przedstawiający rozwiniętą gorącą ścieżkę.

Funkcje

Widok Functions przedstawia procesy, moduły i funkcje przydzielające pamięć.

Zrzut ekranu przedstawiający widok Funkcji.

Zrzut ekranu przedstawiający widok Funkcji.

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.

zrzut ekranu przedstawiający Widok Kolekcji.

zrzut ekranu przedstawiający widok kolekcji.

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.

Zrzut ekranu przedstawiający wykresy kołowe w widoku Kolekcji.

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.