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 Przewodnik dla początkujących dotyczący optymalizowania kodu.

Ustawienia

  1. Wybierz pozycję 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 wybrane narzędzie Dotnet Object Allocation Tracking.

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

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

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

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

  5. Wybierz kartę Alokacja . Dane alokacji pamięci podobne do poniższych.

    Zrzut ekranu przedstawiający kartę Alokacja.

    Zrzut ekranu przedstawiający kartę Alokacja.

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.

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

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

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.

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.

Zrzut ekranu przedstawiający graf narzędzia Alokacja Dotnet.

Zrzut ekranu przedstawiający graf narzędzia Alokacja Dotnet.

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 graf czasu alokacji Dotnet.

Zrzut ekranu przedstawiający przefiltrowany graf czasu alokacji Dotnet.

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.

Zrzut ekranu przedstawiający rozwinięty widok Alokacja.

Zrzut ekranu przedstawiający rozwinięty widok Alokacja.

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:

  • 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 odwołania - 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.

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

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

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

Funkcje

Widok Funkcje zawiera 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 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.

Zrzut ekranu przedstawiający widok Kolekcja.

Zrzut ekranu przedstawiający widok Kolekcja.

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.

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

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.