Analizowanie użycia pamięci bez debugowania w profilerze wydajności (C#, Visual Basic, C++, F#)

Narzędzie Użycie pamięci monitoruje użycie pamięci aplikacji. Możesz użyć tego narzędzia, aby przeanalizować efekty pamięci w czasie rzeczywistym w scenariuszach, które aktywnie opracowujesz w programie Visual Studio. Możesz wykonać szczegółowe migawki stanów pamięci aplikacji i porównać migawki, aby znaleźć główne przyczyny problemów z pamięcią. Narzędzie Użycie pamięci jest obsługiwane w aplikacjach platformy .NET, ASP.NET, C++lub trybu mieszanego (.NET i natywnego).

Narzędzie Użycie pamięci może działać z debugerem lub bez tego debugera. W tym artykule pokazano, jak używać narzędzia Użycie pamięci bez debugera w profilerze wydajności programu Visual Studio, który jest zalecany w przypadku kompilacji wersji. Aby uzyskać informacje na temat wybierania najlepszego narzędzia do analizy pamięci dla Twoich potrzeb, zobacz Wybieranie narzędzia do analizy pamięci.

Sesje diagnostyczne użycia pamięci

Aby rozpocząć sesję diagnostyki użycia pamięci:

  1. Otwórz projekt w programie Visual Studio.

    Narzędzie Użycie pamięci obsługuje aplikacje platformy .NET, ASP.NET, C++lub trybu mieszanego (.NET i natywne).

  2. W menu Debuguj ustaw konfigurację rozwiązania na Release (Wydanie ) i wybierz pozycję Local Windows Debugger (lub Local Machine) jako element docelowy wdrożenia.

  3. Na pasku menu wybierz pozycję Debugowanie>profilera wydajności.

  4. W obszarze Dostępne narzędzia wybierz pozycję Użycie pamięci, a następnie wybierz pozycję Uruchom.

    Start a Memory Usage diagnostic session

Monitorowanie użycia pamięci

Po uruchomieniu sesji diagnostycznej aplikacja zostanie uruchomiona, a w oknie Narzędzia diagnostyczne zostanie wyświetlony wykres osi czasu użycia pamięci aplikacji.

Screenshot of the Diagnostic Tools window in the Visual Studio Performance Profiler showing a timeline graph of the app's memory use.

Screenshot of the Diagnostic Tools window in the Visual Studio Performance Profiler showing a timeline graph of the app's memory use.

Wykres osi czasu przedstawia wahania pamięci podczas uruchamiania aplikacji. Skoki na wykresie zwykle wskazują, że jakiś kod zbiera lub tworzy dane, a następnie odrzuca je po zakończeniu przetwarzania. Duże skoki wskazują obszary, które można zoptymalizować. Głównym problemem jest wzrost zużycia pamięci, który nie jest zwracany. Może to wskazywać na nieefektywne użycie pamięci, a nawet przeciek pamięci.

Tworzenie migawek stanów pamięci aplikacji

Aplikacja używa dużej liczby obiektów i warto skoncentrować analizę na jednym scenariuszu. Możesz też znaleźć problemy z pamięcią do zbadania. Migawki można wykonywać podczas sesji diagnostycznej, aby przechwytywać użycie pamięci w określonych momentach. Przed pojawieniem się problemu z pamięcią warto uzyskać migawkę punktu odniesienia aplikacji. Możesz wykonać kolejną migawkę po pierwszym wystąpieniu problemu i dodatkowych migawek, jeśli możesz powtórzyć scenariusz.

Aby zebrać migawki, wybierz pozycję Wykonaj migawkę , gdy chcesz przechwycić dane pamięci.

Zamykanie sesji diagnostycznej

Aby zatrzymać sesję monitorowania bez tworzenia raportu, zamknij okno diagnostyczne. Aby wygenerować raport po zakończeniu zbierania lub tworzenia migawek, wybierz pozycję Zatrzymaj kolekcję.

Stop Collection

Jeśli masz problemy ze zbieraniem lub wyświetlaniem danych, zobacz Rozwiązywanie problemów z błędami profilowania i rozwiązywanie problemów.

Raporty użycia pamięci

Po zatrzymaniu zbierania danych narzędzie Użycie pamięci zatrzymuje aplikację i wyświetla stronę Przegląd użycia pamięci.

Screenshot of the overview page in the Memory Usage tool in the Visual Studio Performance Profiler, showing a memory usage graph and two snapshot panes.

Screenshot of the overview page in the Memory Usage tool in the Visual Studio Performance Profiler, showing a memory usage graph and two snapshot panes.

Migawki użycia pamięci

Liczby w okienkach Migawki pokazują obiekty i bajty w pamięci podczas wykonywania każdej migawki oraz różnicę między migawką a poprzednią.

Liczby to linki, które otwierają szczegółowe widoki raportów użycia pamięci w nowych oknach programu Visual Studio. Raport szczegółów migawki przedstawia typy i wystąpienia w jednej migawki. Raport różnicy (różnicy) migawki porównuje typy i wystąpienia w dwóch migawkach.

Snapshot view links

Obraz opis
Step 1 Całkowita liczba bajtów w pamięci podczas wykonywania migawki. Wybierz ten link, aby wyświetlić raport szczegółów migawki posortowany według całkowitego rozmiaru wystąpień typu.
Step 2 Całkowita liczba obiektów w pamięci podczas wykonywania migawki. Wybierz ten link, aby wyświetlić raport szczegółów migawki posortowany według liczby wystąpień typów.
Step 3 Różnica między całkowitym rozmiarem obiektów pamięci w tej migawki a poprzednią migawką. Liczba dodatnia oznacza, że rozmiar pamięci tej migawki jest większy niż poprzedni, a liczba ujemna oznacza, że rozmiar jest mniejszy. Punkt odniesienia oznacza, że migawka jest pierwszą w sesji diagnostycznej. Brak różnicy oznacza, że różnica wynosi zero. Wybierz ten link, aby wyświetlić raport różnic migawki posortowany według różnicy w całkowitym rozmiarze wystąpień typów.
Step 4 Różnica między całkowitą liczbą obiektów pamięci w tej migawki a poprzednią migawką. Wybierz ten link, aby wyświetlić raport różnic migawki. Jest ona posortowana według różnicy w łącznej liczbie wystąpień typów.

Snapshot view links

Obraz opis
Step 1 Całkowita liczba obiektów w pamięci podczas wykonywania migawki. Wybierz ten link, aby wyświetlić raport szczegółów migawki posortowany według liczby wystąpień typów.
Step 2 Różnica między całkowitą liczbą obiektów pamięci w tej migawki a poprzednią migawką. Wybierz ten link, aby wyświetlić raport różnic migawki posortowany według różnicy w łącznej liczbie wystąpień typów.
Step 3 Całkowita liczba bajtów w pamięci podczas wykonywania migawki. Wybierz ten link, aby wyświetlić raport szczegółów migawki posortowany według całkowitego rozmiaru wystąpień typu.
Step 4 Różnica między całkowitym rozmiarem obiektów pamięci w tej migawki a poprzednią migawką. Liczba dodatnia oznacza, że rozmiar pamięci tej migawki jest większy niż poprzedni, a liczba ujemna oznacza, że rozmiar jest mniejszy. Punkt odniesienia oznacza, że migawka jest pierwszą w sesji diagnostycznej. Brak różnicy oznacza, że różnica wynosi zero. Wybierz ten link, aby wyświetlić raport różnic migawki posortowany według różnicy w całkowitym rozmiarze wystąpień typów.

Raporty migawek użycia pamięci

Po wybraniu jednego z linków migawki na stronie Przegląd użycia pamięci raport migawki zostanie otwarty na nowej stronie.

Memory Usage snapshot report

Memory Usage snapshot report

Jeśli typ obiektu jest niebieski, możesz wybrać go, aby przejść do obiektu w kodzie źródłowym w osobnym oknie.

Typy, których nie można zidentyfikować lub których zaangażowanie w kod, którego nie rozumiesz, są prawdopodobnie obiektami platformy .NET, systemu operacyjnego lub kompilatora. Narzędzie Użycie pamięci wyświetla te obiekty, jeśli są one zaangażowane w łańcuchy własności obiektów.

W raporcie migawki:

  • W drzewie Pamięci zarządzanej są wyświetlane typy i wystąpienia w raporcie. Wybranie typu lub wystąpienia powoduje wyświetlenie drzew Ścieżki do katalogu głównego i obiektów , do których odwołuje się wybrany element.

  • W obszarze Ścieżki do drzewa głównego jest wyświetlany łańcuch obiektów odwołujących się do typu lub wystąpienia. Moduł odśmieceń pamięci platformy .NET czyści pamięć dla obiektu tylko wtedy, gdy wszystkie odwołania do niego zostały zwolnione.

  • Drzewo Odwołane typy lub obiekty , do których odwołuje się odwołanie, pokazuje obiekty, do których odwołuje się wybrany typ lub wystąpienie.

Filtry drzewa raportów

Wiele typów w aplikacjach nie jest wymaganych dla deweloperów aplikacji. Filtry raportu migawki mogą ukrywać większość tych typów w zarządzanych pamięci i ścieżkach do drzew głównych .

Sort and filter options

Sort and filter options

  • Aby filtrować drzewo według nazwy typu, wprowadź nazwę w polu Filtr . Filtr nie uwzględnia wielkości liter i rozpoznaje określony ciąg w dowolnej części nazwy typu.

  • Wybierz pozycję Zwiń małe obiekty na liście rozwijanej Filtr, aby ukryć typy, których rozmiar (bajty) jest mniejszy niż 0,5 procent całkowitej pamięci.

  • Wybierz pozycję Tylko mój kod na liście rozwijanej Filtr , aby ukryć większość wystąpień generowanych przez kod zewnętrzny. Typy zewnętrzne należą do systemu operacyjnego lub składników struktury lub są generowane przez kompilator.

Raporty szczegółów migawki

Raport szczegółów migawki opisuje jedną migawkę z sesji diagnostycznej. Aby otworzyć raport, wybierz link rozmiaru lub obiektów w okienku migawki.

Links to snapshot report in a snapshot pane

Links to snapshot report in a snapshot pane

Oba linki otwierają ten sam raport. Jedyną różnicą jest początkowa kolejność sortowania drzewa pamięci zarządzanej. Link rozmiaru sortuje raport według kolumny Rozmiar inkluzywny (bajty). Link obiektów sortuje raport według kolumny Count (Liczba ). Możesz zmienić kolumnę sortowania lub kolejność po otworzie raportu.

Drzewo pamięci zarządzanej (raporty szczegółów migawki)

Drzewo pamięci zarządzanej zawiera listę typów obiektów przechowywanych w pamięci. Rozwiń nazwę typu, aby wyświetlić 10 największych wystąpień typu posortowanych według rozmiaru. Wybierz typ lub wystąpienie, aby wyświetlić drzewa Ścieżki do katalogu głównego i obiekty , do których odwołuje się wybrany element.

Managed Heap tree

Managed Memory tree

Drzewo pamięci zarządzanej w raporcie szczegółów migawki zawiera następujące kolumny:

Nazwa/nazwisko opis
Typ obiektu Nazwa typu lub wystąpienia obiektu.
Licznik Liczba wystąpień obiektów typu. Liczba jest zawsze 1 dla wystąpienia.
Rozmiar (bajty) W przypadku typu rozmiar wszystkich wystąpień typu w migawce jest mniejszy niż rozmiar obiektów zawartych w wystąpieniach. Na przykład rozmiar obiektu jest mniejszy niż rozmiar obiektów zawartych w wystąpieniu.
Rozmiar inkluzywny (bajty) Rozmiar wystąpień typu lub rozmiar pojedynczego wystąpienia, w tym rozmiar zawartych obiektów.
Moduł Moduł zawierający obiekt .

Ścieżki do drzewa głównego (raporty szczegółów migawki)

W obszarze Ścieżki do drzewa głównego jest wyświetlany łańcuch obiektów odwołujących się do typu lub wystąpienia. Moduł odśmieceń pamięci platformy .NET czyści pamięć dla obiektu tylko wtedy, gdy wszystkie odwołania do niego zostały zwolnione.

W przypadku typu w drzewie Ścieżki do katalogu głównego liczba obiektów, które przechowują odwołania do tego typu, jest wyświetlana w kolumnie Liczba odwołań.

Paths to Root tree for types

Paths to Root tree for types

Przywołyzowane typy lub drzewo obiektów, do których odwołuje się odwołanie (raporty szczegółów migawki)

Drzewo Odwołane typy lub obiekty , do których odwołuje się odwołanie, pokazuje obiekty, do których odwołuje się wybrany typ lub wystąpienie.

Referenced Objects tree for instances

Referenced Objects tree for instances

Drzewo Typy przywoływanych w raporcie szczegółów migawki zawiera następujące kolumny. Drzewo Obiekty, do których odwołuje się odwołanie, nie ma kolumny Liczba odwołań.

Nazwa/nazwisko opis
Typ obiektu lub wystąpienie Nazwa typu lub wystąpienia.
Liczba odwołań W przypadku typów liczba wystąpień obiektów typu.
Rozmiar (bajty) W przypadku typu rozmiar wszystkich wystąpień typu jest mniejszy niż rozmiar obiektów zawartych w typie. Na przykład rozmiar obiektu jest mniejszy niż rozmiar obiektów znajdujących się w obiekcie.
Rozmiar inkluzywny (bajty) Całkowity rozmiar wystąpień typu lub rozmiar wystąpienia, w tym rozmiar zawartych obiektów.
Moduł Moduł zawierający obiekt .

Różnice w migawkach (różnice) raportów

Raport różnicy (różnicy) migawki przedstawia zmiany między migawką podstawową a poprzednią migawką. Aby otworzyć raport różnicowy, wybierz jeden z linków różnic w okienku migawki.

Oba linki otwierają ten sam raport. Jedyną różnicą jest początkowa kolejność sortowania drzewa pamięci zarządzanej w raporcie. Link rozmiaru sortuje raport według kolumny Różnice rozmiaru inkluzywnego (bajtów). Link obiektów sortuje raport według kolumny Liczba różnic . Możesz zmienić kolumnę sortowania lub kolejność po otworzie raportu.

Links to difference report in a snapshot pane

Links to difference report in a snapshot pane

Drzewo pamięci zarządzanej (raporty różnic migawki)

Drzewo pamięci zarządzanej zawiera listę typów obiektów przechowywanych w pamięci. Możesz rozwinąć nazwę typu, aby wyświetlić 10 największych wystąpień typu, posortowanych według rozmiaru. Wybierz typ lub wystąpienie, aby wyświetlić drzewa Ścieżki do katalogu głównego i obiekty , do których odwołuje się wybrany element.

Managed Heap tree for a type in difference report

Managed Memory tree for a type in difference report

Drzewo pamięci zarządzanej w raporcie różnic migawki zawiera następujące kolumny:

Nazwa/nazwisko opis
Typ obiektu Nazwa typu lub wystąpienia obiektu.
Licznik Liczba wystąpień typu w migawki podstawowej. Liczba jest zawsze 1 dla wystąpienia.
Różnice liczby W przypadku typu różnica w liczbie wystąpień typu między migawką podstawową a poprzednią migawką. Pole jest puste dla wystąpienia.
Rozmiar (bajty) Rozmiar obiektów w migawki podstawowej jest mniejszy niż rozmiar obiektów w obiektach. W przypadku typu rozmiar (bajty) i rozmiar inkluzywny (bajty) to sumy rozmiarów wystąpień typu.
Łączna różnica rozmiaru (bajty) W przypadku typu różnica całkowitego rozmiaru wystąpień typu między migawką podstawową a poprzednią migawką jest mniejsza niż rozmiar obiektów w wystąpieniach. Pole jest puste dla wystąpienia.
Rozmiar inkluzywny (bajty) Rozmiar obiektów w migawki podstawowej, w tym rozmiar obiektów w obiektach.
Różnice rozmiaru inkluzywnego (bajty) W przypadku typu różnica w rozmiarze wszystkich wystąpień typu między migawką podstawową a poprzednią migawką, w tym rozmiar obiektów w obiektach. Pole jest puste dla wystąpienia.
Moduł Moduł zawierający obiekt .

Ścieżki do drzewa głównego (raporty różnic migawki)

W obszarze Ścieżki do drzewa głównego jest wyświetlany łańcuch obiektów odwołujących się do typu lub wystąpienia. Moduł odśmieceń pamięci platformy .NET czyści pamięć dla obiektu tylko wtedy, gdy wszystkie odwołania do niego zostały zwolnione.

W przypadku typu w drzewie Ścieżki do katalogu głównego liczba obiektów, które przechowują odwołania do tego typu, jest wyświetlana w kolumnie Liczba odwołań. Różnica w liczbie z poprzedniej migawki znajduje się w kolumnie Różnice odwołań.

Paths To Root tree in a diff report

Paths To Root tree in a diff report

Przywołyzowane typy lub drzewo obiektów, do których odwołuje się odwołanie (raporty różnic migawek)

Drzewo Odwołane typy lub obiekty , do których odwołuje się odwołanie, pokazuje obiekty, do których odwołuje się wybrany typ lub wystąpienie.

Referenced Types in a diff report

Referenced Types in a diff report

Drzewo Typy przywoływanych w raporcie różnic migawki zawiera następujące kolumny. Drzewo Przywoływanych obiektów zawiera kolumny Wystąpienie, Rozmiar (bajty), Rozmiar inkluzywny (bajty) i Moduł.

Nazwa/nazwisko opis
Typ obiektu lub wystąpienie Nazwa typu lub wystąpienia obiektu.
Liczba odwołań Liczba wystąpień typu w migawki podstawowej.
Różnice liczby odwołań W przypadku typu różnica w liczbie wystąpień typu między migawką podstawową a poprzednią migawką.
Rozmiar (bajty) Rozmiar obiektów w migawki podstawowej jest mniejszy niż rozmiar obiektów w obiektach. W przypadku typu rozmiar (bajty) i rozmiar inkluzywny (bajty) to sumy rozmiarów wystąpień typu.
Łączna różnica rozmiaru (bajty) W przypadku typu różnica całkowitego rozmiaru wystąpień typu między migawką podstawową a poprzednią migawką jest mniejsza niż rozmiar obiektów w wystąpieniach.
Rozmiar inkluzywny (bajty) Rozmiar obiektów w migawki podstawowej, w tym rozmiar obiektów w obiektach.
Różnice rozmiaru inkluzywnego (bajty) W przypadku typu różnica w rozmiarze wszystkich wystąpień typu między migawką podstawową a poprzednią migawką, w tym rozmiar obiektów w obiektach.
Moduł Moduł zawierający obiekt .

raport Szczegółowe informacje

W programie Visual Studio 2022 narzędzie analiza pamięci zapewnia również wiele zaawansowanych wbudowanych funkcji automatycznego wglądu w pamięć zarządzaną. Wybierz kartę Szczegółowe informacje w raportach Typy zarządzane i wyświetla odpowiednie automatyczne szczegółowe informacje, takie jak zduplikowane ciągi, tablice rozrzedlone i przecieki obsługi zdarzeń. Aby uzyskać więcej informacji, zobacz Użycie pamięci Szczegółowe informacje.

Screenshot of Managed memory insights.