Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 uruchamiać w kompilacjach wydania lub debugowania. W tym artykule pokazujemy, jak używać narzędzia Użycie pamięci w Profilatorze wydajności programu Visual Studio , który jest zalecany do kompilacji wersji. Aby uzyskać informacje na temat wybierania najlepszego narzędzia do analizy pamięci dla Twoich potrzeb, zobacz Wybierz narzędzie do analizy pamięci.
Aby uzyskać najlepsze doświadczenie w tej dokumentacji, wybierz preferowany język programowania lub środowisko uruchomieniowe z listy w górnej części artykułu.
Sesje diagnostyczne użycia pamięci
Aby rozpocząć sesję diagnostyki użycia pamięci:
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).
W menu Debug ustaw konfigurację rozwiązania na Release i wybierz cel wdrożenia.
Cel wdrożenia zazwyczaj odpowiada nazwie projektu wskazującego wdrożenie lokalne.
Na pasku menu wybierz pozycję Debug>Analizator wydajności.
W obszarze Dostępne narzędzia, wybierz pozycję Użycie pamięci, a następnie wybierz pozycję Rozpocznij.
! [UWAGA] W przypadku niektórych typów projektów, takich jak CMake, należy ustawić cel uruchamiania na Wykonywalny. Aby uzyskać więcej informacji, zobacz Jakie narzędzia są obsługiwane dla mojego projektu?.
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.
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. Można robić migawki podczas sesji diagnostycznej, aby zarejestrować użycie pamięci w określonych momentach. Przed pojawieniem się problemu z pamięcią warto uzyskać wyjściową migawkę 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 zbieranie.
Jeśli masz problemy ze zbieraniem lub wyświetlaniem danych, zobacz Rozwiązywanie problemów z błędami profilowania i rozwiązanie kwestii.
Raporty użycia pamięci
Po zatrzymaniu zbierania danych narzędzie Użycie pamięci zatrzymuje aplikację i wyświetla stronę przeglądu użycia pamięci .
Migawki użycia pamięci
Liczby w okienkach Snapshot 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 dotyczących Użycia Pamięci w nowych oknach Visual Studio. Raport szczegółów migawki przedstawia typy i wystąpienia w jednej migawce. Raport porównawczy różnic migawek porównuje typy i wystąpienia w dwóch migawkach.
W przypadku języka C++ kolumna Objects (Różnice) jest nazwana Allocations (Różnice).
| obraz | Opis |
|---|---|
|
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. |
|
Różnica między całkowitą liczbą obiektów pamięci w tej migawce 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. |
|
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. |
|
Różnica między całkowitym rozmiarem obiektów pamięci na tej migawce a poprzedniej migawce. Liczba dodatnia oznacza, że rozmiar pamięci tej migawki jest większy niż rozmiar poprzedniej migawki, a liczba ujemna oznacza, że rozmiar jest mniejszy. Wartość bazowa 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 dotyczące typów zarządzanych
Wybierz bieżący link Objects (Różnice) komórki w tabeli podsumowania Użycie pamięci.
Notatka
W przypadku kodu platformy .NET ikona View Instances (
) jest dostępna tylko podczas korzystania z narzędzia debugera zintegrowanego użycia pamięci lub podczas otwierania migawki stert i wybrania Debuguj pamięć zarządzaną.
Górny panel pokazuje liczbę i rozmiar typów w migawce, łącznie z rozmiarem wszystkich obiektów, do których odwołuje się dany typ (całkowitego rozmiaru).
Drzewo Ścieżki do korzenia w dolnym okienku wyświetla obiekty, które odwołują się do typu wybranego w górnym okienku. Moduł odśmieceń pamięci platformy .NET czyści pamięć dla obiektu tylko wtedy, gdy ostatni typ odwołujący się do niego został zwolniony. Aby uzyskać więcej informacji na temat używania drzewa ścieżek do katalogu głównego, zobacz Analizowanie ścieżki gorącej do katalogu głównego.
Drzewo Typy referencyjne wyświetla odwołania przechowywane przez typ wybrany w górnym okienku.
Filtry drzewa raportów
W aplikacjach wiele komponentów nie jest potrzebnych do tego, by deweloperzy badali problemy z pamięcią. Filtry raportu migawki mogą ukrywać większość tych typów w drzewach pamięci zarządzanej i ścieżkach do korzenia.
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 Pokaż 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.
Wybierz 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.
Raporty typów natywnych
Wybierz bieżący link komórki Alokacje (Różnice) lub Rozmiar Sterty (Różnice) w tabeli podsumowania Użycie Pamięci w oknie Narzędzia Diagnostyczne.
Widok typów wyświetla liczbę i rozmiar typów w migawce.
Wybierz ikonę Pokaż instancje obok wybranego typu, aby wyświetlić informacje o obiektach wybranego typu w migawce.
Widok Instances pokazuje wszystkie wystąpienia wybranego typu. Wybranie wystąpienia powoduje wyświetlenie stosu wywołań, który doprowadził do jego utworzenia, w okienku Stosu Wywołań Alokacji. (Te informacje są dostępne tylko podczas debugowania).
Szczegółowe informacje o użyciu pamięci
W przypadku pamięci zarządzanej narzędzie Analizy pamięci zapewnia również wiele zaawansowanych wbudowanych funkcji automatycznego wglądu w szczegółowe informacje. Wybierz kartę Insights w raportach typy zarządzane, aby wyświetlić odpowiednie automatyczne wglądy, takie jak zduplikowane ciągi, tablice rozrzedzonei przecieki obsługi zdarzeń.
W sekcji zduplikowane ciągi przedstawiono listę ciągów, które są przydzielane wiele razy na stercie. Ponadto w tej sekcji przedstawiono łączną wielkość zmarnowanej pamięci, czyli (liczba wystąpień — 1) razy wielkość ciągu.
W sekcji Tablice rozrzedzone przedstawiono tablice, które są w większości wypełnione elementami zerowymi, co może być nieefektywne pod względem wydajności i użycia pamięci. Narzędzie do analizy pamięci automatycznie wykryje te tablice i pokaże, ile pamięci jest marnowane z powodu tych wartości zerowych.
Sekcja Przecieki obsługi zdarzeń dostępna w programie Visual Studio 2022 w wersji 17.9 (wersja zapoznawcza 1) pokazuje potencjalne przecieki pamięci, które mogą wystąpić, gdy jeden obiekt subskrybuje zdarzenie innego obiektu. Jeśli wydawca zdarzenia przeżyje subskrybenta, subskrybent pozostaje aktywny, nawet jeśli nie ma do niego żadnych innych odniesień. Może to prowadzić do przecieków pamięci, w których nieużywane pamięci nie są prawidłowo zwalniane, co powoduje, że aplikacja będzie używać coraz większej ilości pamięci w czasie.
Niektóre typy są znane z posiadania pól, które można odczytać, aby określić rozmiar pamięci natywnej, której używają. Karta Insights przedstawia fałszywe natywne węzły pamięci na wykresie obiektów, które są przechowywane przez obiekty nadrzędne, tak aby interfejs użytkownika rozpoznał je i wyświetlił ich rozmiar i graf referencyjny.
Zmiany (różnice) raportów
Wybierz link zmiany w komórce okienka migawki migawki na stronie Przegląd użycia pamięci.
Wybierz migawkę na liście Porównaj z raportu zarządzanego lub natywnego.
Raport zmiany dodaje kolumny (oznaczone (Różnice)) do raportu podstawowego, które pokazują różnicę między wartością migawki podstawowej a migawką porównania. Oto jak może wyglądać raport różnic dotyczący widoku typu natywnego:
Górny panel pokazuje liczbę i rozmiar typów w migawce, łącznie z rozmiarem wszystkich obiektów, do których odwołuje się dany typ (całkowitego rozmiaru).