Analýza využití paměti bez ladění v profileru výkonu (C#, Visual Basic, C++, F#)

Nástroj Využití paměti monitoruje využití paměti vaší aplikace. Nástroj můžete použít ke studiu efektů paměti v reálném čase scénářů, které aktivně vyvíjíte v sadě Visual Studio. Můžete pořídit podrobné snímky stavů paměti aplikace a porovnat snímky a najít původní příčiny problémů s pamětí. Nástroj Využití paměti se podporuje v aplikacích .NET, ASP.NET, C++ nebo mixed mode (.NET a native).

Nástroj Využití paměti může běžet s ladicím programem nebo bez něj. V tomto článku si ukážeme, jak používat nástroj Využití paměti bez ladicího programu v profileru výkonu sady Visual Studio, který se doporučuje pro sestavení vydaných verzí. Informace o výběru nejvhodnějšího nástroje pro analýzu paměti pro vaše potřeby najdete v tématu Volba nástroje pro analýzu paměti.

Diagnostické relace využití paměti

Zahájení diagnostické relace využití paměti:

  1. Otevřete projekt v sadě Visual Studio.

    Nástroj Využití paměti podporuje aplikace .NET, ASP.NET, C++ nebo smíšený režim (.NET a nativní).

  2. V nabídce Ladění nastavte konfiguraci řešení na Release (Release ) a jako cíl nasazení vyberte Místní ladicí program systému Windows (nebo místní počítač).

  3. Na řádku nabídek vyberte Profiler výkonu ladění>.

  4. V části Dostupné nástroje vyberte Využití paměti a pak vyberte Spustit.

    Start a Memory Usage diagnostic session

Monitorování využití paměti

Když spustíte diagnostickou relaci, spustí se vaše aplikace a v okně Diagnostické nástroje se zobrazí graf časové osy využití paměti vaší aplikace.

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.

Graf časové osy zobrazuje kolísání paměti při spuštění aplikace. Špičky v grafu obvykle značí, že nějaký kód shromažďuje nebo vytváří data, a po dokončení zpracování je zahodí. Velké špičky označují oblasti, které můžete optimalizovat. Hlavním zájmem je nárůst spotřeby paměti, který se nevrátí. To může znamenat neefektivní využití paměti nebo dokonce nevracení paměti.

Pořízení snímků stavů paměti aplikace

Aplikace používá velký počet objektů a možná budete chtít soustředit analýzu na jeden scénář. Nebo můžete najít problémy s pamětí, které je potřeba prozkoumat. Během diagnostické relace můžete pořizovat snímky za účelem zachycení využití paměti v určitých okamžicích. Před zobrazením problému s pamětí je vhodné získat základní snímek aplikace. Po prvním výskytu problému můžete pořídit další snímek a další snímky, pokud můžete scénář zopakovat.

Pokud chcete shromažďovat snímky, vyberte Pořídit snímek , když chcete zachytit data paměti.

Zavření diagnostické relace

Pokud chcete zastavit relaci monitorování bez vytvoření sestavy, jednoduše zavřete diagnostické okno. Pokud chcete vygenerovat sestavu po shromáždění nebo pořízení snímků, vyberte Zastavit kolekci.

Stop Collection

Pokud máte potíže se shromažďováním nebo zobrazováním dat, přečtěte si téma Řešení chyb profilace a řešení problémů.

Sestavy využití paměti

Po zastavení shromažďování dat nástroj Využití paměti aplikaci zastaví a zobrazí stránku Přehled využití paměti.

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.

Snímky využití paměti

Čísla v podoknech Snímků zobrazují objekty a bajty v paměti při pořízení každého snímku a rozdíl mezi snímkem a předchozím snímkem.

Čísla jsou odkazy, které otevírají podrobná zobrazení sestav využití paměti v nových oknech sady Visual Studio. Sestava podrobností snímku zobrazuje typy a instance v jednom snímku. Sestava rozdílu snímků (rozdíl rozdílu) porovnává typy a instance ve dvou snímcích.

Snapshot view links

Image Popis
Step 1 Celkový počet bajtů v paměti při pořízení snímku. Výběrem tohoto odkazu zobrazíte sestavu podrobností snímku seřazenou podle celkové velikosti instancí typu.
Step 2 Celkový početobjektůch Výběrem tohoto odkazu zobrazíte sestavu podrobností snímku seřazenou podle počtu instancí typů.
Step 3 Rozdíl mezi celkovou velikostí paměťových objektů v tomto snímku a předchozím snímkem. Kladné číslo znamená, že velikost paměti tohoto snímku je větší než předchozí a záporné číslo znamená, že velikost je menší. Směrný plán znamená, že snímek je první v diagnostické relaci. Žádný rozdíl znamená, že rozdíl je nula. Výběrem tohoto odkazu zobrazíte sestavu rozdílu snímku seřazenou podle rozdílu v celkové velikosti instancí typů.
Step 4 Rozdíl mezi celkovým počtem paměťových objektů v tomto snímku a předchozím snímkem. Výběrem tohoto odkazu zobrazíte sestavu rozdílu snímku. Seřadí se podle rozdílu v celkovém počtu instancí typů.

Snapshot view links

Image Popis
Step 1 Celkový početobjektůch Výběrem tohoto odkazu zobrazíte sestavu podrobností snímku seřazenou podle počtu instancí typů.
Step 2 Rozdíl mezi celkovým počtem paměťových objektů v tomto snímku a předchozím snímkem. Výběrem tohoto odkazu zobrazíte sestavu rozdílu snímku seřazenou podle rozdílu v celkovém počtu instancí typů.
Step 3 Celkový počet bajtů v paměti při pořízení snímku. Výběrem tohoto odkazu zobrazíte sestavu podrobností snímku seřazenou podle celkové velikosti instancí typu.
Step 4 Rozdíl mezi celkovou velikostí paměťových objektů v tomto snímku a předchozím snímkem. Kladné číslo znamená, že velikost paměti tohoto snímku je větší než předchozí a záporné číslo znamená, že velikost je menší. Směrný plán znamená, že snímek je první v diagnostické relaci. Žádný rozdíl znamená, že rozdíl je nula. Výběrem tohoto odkazu zobrazíte sestavu rozdílu snímku seřazenou podle rozdílu v celkové velikosti instancí typů.

Sestavy snímků využití paměti

Když vyberete jeden z odkazů na snímky na stránce Přehled využití paměti, otevře se sestava snímků na nové stránce.

Memory Usage snapshot report

Memory Usage snapshot report

Pokud je typ objektu modrý, můžete ho vybrat a přejít k objektu ve zdrojovém kódu v samostatném okně.

Typy, které nemůžete identifikovat nebo jejichž zapojení do kódu nerozumíte, jsou pravděpodobně objekty .NET, operačního systému nebo kompilátoru. Nástroj Využití paměti zobrazí tyto objekty, pokud jsou zapojeny do řetězů vlastnictví vašich objektů.

V sestavě snímku:

  • Strom spravované paměti zobrazuje typy a instance v sestavě. Výběrem typu nebo instance se zobrazí stromy Cesty ke kořenovému adresáři a odkazovaným objektům pro vybranou položku.

  • Cesta ke kořenovému stromu zobrazuje řetězec objektů, které odkazují na typ nebo instanci. Uvolňování paměti .NET vyčistí paměť pro objekt pouze v případě, že byly vydány všechny odkazy na objekt.

  • Odkazované typy nebo odkazované objekty strom zobrazuje objekty , které vybraný typ nebo instance odkazuje.

Filtry stromové struktury sestavy

Vývojáři aplikací nevyžadují mnoho typů. Filtry sestav snímků můžou skrýt většinu těchto typů ve spravované paměti a cestách ke kořenovým stromům .

Sort and filter options

Sort and filter options

  • Pokud chcete filtrovat strom podle názvu typu, zadejte název do pole Filtr . Filtr nerozlišuje malá a velká písmena a rozpozná zadaný řetězec v libovolné části názvu typu.

  • Výběrem možnosti Sbalit malé objekty v rozevíracím seznamu Filtr skryjete typy, jejichž velikost (bajty) je menší než 0,5 procenta celkové paměti.

  • V rozevíracím seznamu Filtr vyberte Pouze můj kód a skryjte většinu instancí generovaných externím kódem. Externí typy patří do operačního systému nebo součástí architektury nebo jsou generovány kompilátorem.

Sestavy podrobností snímku

Sestava podrobností snímku popisuje jeden snímek z diagnostické relace. Pokud chcete sestavu otevřít, vyberte odkaz na velikost nebo objekty v podokně snímků.

Links to snapshot report in a snapshot pane

Links to snapshot report in a snapshot pane

Oba odkazy otevřou stejnou sestavu. Jediným rozdílem je počáteční pořadí řazení stromu spravované paměti . Odkaz na velikost seřadí sestavu podle sloupce Inkluzivní velikost (Bajty ). Odkaz na objekty seřadí sestavu podle sloupce Počet . Po otevření sestavy můžete změnit sloupec nebo pořadí řazení.

Strom spravované paměti (sestavy podrobností snímku)

Strom spravované paměti obsahuje seznam typů objektů, které jsou uloženy v paměti. Rozbalením názvu typu zobrazíte 10 největších instancí typu seřazených podle velikosti. Vyberte typ nebo instanci, aby se zobrazily stromy Cesty ke kořenovému adresáři a odkazovaným objektům pro vybranou položku.

Managed Heap tree

Managed Memory tree

Strom spravované paměti v sestavě podrobností snímku obsahuje následující sloupce:

Název Popis
Typ objektu Název typu nebo instance objektu.
Počet Počet instancí objektu typu. Počet je vždy 1 pro instanci.
Velikost (bajty) U typu je velikost všech instancí typu snímku menší velikost objektů obsažených v instancích. Například velikost objektu, menší velikost objektů obsažených v instanci.
Inkluzivní velikost (bajty) Velikost instancí typu nebo velikosti jedné instance, včetně velikosti obsažených objektů.
Modul Modul, který obsahuje objekt.

Cesty ke kořenovému stromu (sestavy podrobností snímku)

Cesta ke kořenovému stromu zobrazuje řetězec objektů, které odkazují na typ nebo instanci. Uvolňování paměti .NET vyčistí paměť pro objekt pouze v případě, že byly vydány všechny odkazy na objekt.

U typu v cest ke kořenovému stromu se počet objektů, které obsahují odkazy na tento typ, zobrazí ve sloupci Počet odkazů.

Paths to Root tree for types

Paths to Root tree for types

Odkazované typy nebo strom odkazovaných objektů (sestavy podrobností snímku)

Odkazované typy nebo odkazované objekty strom zobrazuje objekty , které vybraný typ nebo instance odkazuje.

Referenced Objects tree for instances

Referenced Objects tree for instances

Strom Odkazované typy v sestavě podrobností snímku obsahuje následující sloupce. Strom Odkazované objekty neobsahuje sloupec Počet odkazů.

Název Popis
Typ objektu nebo instance Název typu nebo instance.
Referenční počet Pro typy počet instancí objektu typu.
Velikost (bajty) U typu je velikost všech instancí typu menší než velikost objektů obsažených v typu. Například velikost objektu, menší velikost objektů obsažených v objektu.
Inkluzivní velikost (bajty) Celková velikost instancí typu nebo velikost instance, včetně velikosti obsažených objektů.
Modul Modul, který obsahuje objekt.

Sestavy rozdílů mezi snímky (rozdíly mezi snímky)

Sestava rozdílu snímků (rozdíl rozdílu) ukazuje změny mezi primárním snímkem a předchozím snímkem. Pokud chcete otevřít rozdílovou sestavu, vyberte jeden z odkazů rozdílů v podokně snímků.

Oba odkazy otevřou stejnou sestavu. Jediným rozdílem je počáteční pořadí řazení stromu spravované paměti v sestavě. Odkaz na velikost seřadí sestavu podle sloupce Diff (Bytes). Odkaz na objekty seřadí sestavu podle sloupce Počet rozdílů . Po otevření sestavy můžete změnit sloupec nebo pořadí řazení.

Links to difference report in a snapshot pane

Links to difference report in a snapshot pane

Strom spravované paměti (sestavy rozdílu snímků)

Strom spravované paměti obsahuje seznam typů objektů, které jsou uloženy v paměti. Můžete rozbalit název typu a zobrazit 10 největších instancí typu seřazených podle velikosti. Vyberte typ nebo instanci, aby se zobrazily stromy Cesty ke kořenovému adresáři a odkazovaným objektům pro vybranou položku.

Managed Heap tree for a type in difference report

Managed Memory tree for a type in difference report

Strom spravované paměti v sestavě rozdílu snímků obsahuje následující sloupce:

Název Popis
Typ objektu Název typu nebo instance objektu.
Počet Počet instancí typu v primárním snímku Počet je vždy 1 pro instanci.
Rozdíl počtu U typu je rozdíl v počtu instancí typu mezi primárním snímkem a předchozím snímkem. Pole je pro instanci prázdné.
Velikost (bajty) Velikost objektů v primárním snímku, menší velikost objektů v objektech. U typu jsou součty velikostí (bajtů) a Inkluzivní velikostí (Bajty) velikostí instancí typu.
Rozdíl celkové velikosti (bajty) U typu je rozdíl v celkové velikosti instancí typu mezi primárním snímkem a předchozím snímkem menší velikost objektů v instancích. Pole je pro instanci prázdné.
Inkluzivní velikost (bajty) Velikost objektů v primárním snímku, včetně velikosti objektů v objektech.
Rozdíl velikosti včetně (bajty) U typu je rozdíl ve velikosti všech instancí typu mezi primárním snímkem a předchozím snímkem, včetně velikosti objektů v objektech. Pole je pro instanci prázdné.
Modul Modul, který obsahuje objekt.

Cesty ke kořenovému stromu (sestavy rozdílu snímků)

Cesta ke kořenovému stromu zobrazuje řetězec objektů, které odkazují na typ nebo instanci. Uvolňování paměti .NET vyčistí paměť pro objekt pouze v případě, že byly vydány všechny odkazy na objekt.

U typu v cest ke kořenovému stromu se počet objektů, které obsahují odkazy na tento typ, zobrazí ve sloupci Počet odkazů. Rozdíl v počtu od předchozího snímku je ve sloupci Rozdíl odkazu.

Paths To Root tree in a diff report

Paths To Root tree in a diff report

Odkazované typy nebo strom odkazovaných objektů (sestavy rozdílů snímků)

Odkazované typy nebo odkazované objekty strom zobrazuje objekty , které vybraný typ nebo instance odkazuje.

Referenced Types in a diff report

Referenced Types in a diff report

Strom Odkazované typy v sestavě rozdílu snímků obsahuje následující sloupce. Odkazovaný strom objektůsloupce Instance, Size (Bytes), Inclusive Size (Bytes) (Bajty) a Module (Module).

Název Popis
Typ objektu nebo instance Název typu nebo instance objektu.
Referenční počet Počet instancí typu v primárním snímku
Rozdíl počtu odkazů U typu je rozdíl v počtu instancí typu mezi primárním snímkem a předchozím snímkem.
Velikost (bajty) Velikost objektů v primárním snímku, menší velikost objektů v objektech. U typu jsou součty velikostí (bajtů) a Inkluzivní velikostí (Bajty) velikostí instancí typu.
Rozdíl celkové velikosti (bajty) U typu je rozdíl v celkové velikosti instancí typu mezi primárním snímkem a předchozím snímkem menší velikost objektů v instancích.
Inkluzivní velikost (bajty) Velikost objektů v primárním snímku, včetně velikosti objektů v objektech.
Rozdíl velikosti včetně (bajty) U typu je rozdíl ve velikosti všech instancí typu mezi primárním snímkem a předchozím snímkem, včetně velikosti objektů v objektech.
Modul Modul, který obsahuje objekt.

sestava Přehledy

V sadě Visual Studio 2022 poskytuje nástroj Analýza paměti také několik výkonných integrovaných automatických přehledů pro spravovanou paměť. V sestavách spravovaných typů vyberte kartu Přehledy a zobrazí se příslušné automatické přehledy, jako jsou duplicitní řetězce, řídké pole a nevracení obslužné rutiny události. Další informace naleznete v tématu Využití paměti Přehledy.

Screenshot of Managed memory insights.