Analýza využití paměti bez ladění v Profiler výkonu
Nástroj Využití paměti monitoruje využití paměti vaší aplikace. Pomocí tohoto nástroje můžete prostudovat efekty paměti v reálném čase u scénářů, které aktivně vyvíjíte v Visual Studio. Můžete pořvat podrobné snímky stavů paměti aplikace a porovnat snímky a najít tak hlavní příčiny problémů s pamětí. Nástroj Využití paměti je podporován v aplikacích .NET, ASP.NET, C++ nebo ve smíšeném režimu (.NET a nativní).
Nástroj Využití paměti lze spustit 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 Visual Studio Profiler výkonu, který se doporučuje pro sestavení verzí.
Diagnostické relace využití paměti
Spuštění diagnostické relace využití paměti:
Otevřete projekt v Visual Studio.
Nástroj Využití paměti podporuje aplikace .NET, ASP.NET, C++ nebo aplikace ve smíšeném režimu (.NET a nativní).
V nabídce Ladit nastavte konfiguraci řešení na Release (Verze) a jako cíl nasazení vyberte Local Windows Debugger (nebo Local Machine).
V řádku nabídek zvolte Ladit > Profiler výkonu.
V části Available Tools(Dostupné nástroje) vyberte Memory Usage (Využití paměti) a pak vyberte Start ( Spustit).

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

Graf časové osy ukazuje 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 zpracování je zahodí. Velké špičky značí oblasti, které můžete optimalizovat. Větší obavou je nárůst spotřeby paměti, který se nevrací, protože může značit neefektivní využití paměti nebo dokonce nevrácenou paměť.
Pořizování snímků stavů paměti aplikace
Aplikace používá velký počet objektů a vy můžete chtít soustředit svou analýzu na jeden scénář. Nebo můžete najít problémy s pamětí, které byste měli prozkoumat. Během diagnostické relace můžete pořizovat snímky a zachytit tak využití paměti v určitých okamžicích. Je vhodné získat základní snímek aplikace, než se objeví problém s pamětí, další snímek po prvním výskytu problému a další snímky, pokud můžete scénář zopakovat.
Pokud chcete shromažďovat snímky, vyberte možnost Pořídit snímek, pokud chcete zachytit data paměti.
Zavření diagnostické relace
Pokud chcete zastavit relaci monitorování bez vytvoření sestavy, stačí zavřít diagnostické okno. Pokud chcete po shromáždění nebo pořízení snímků vygenerovat sestavu, vyberte Zastavit shromažďování.

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

Snímky využití paměti
Čísla v podoknech Snímek zobrazují bajty a objekty v paměti při pořízení jednotlivých snímků a rozdíl mezi snímkem a předchozím snímkem.
Čísla jsou odkazy, které otevřou podrobná zobrazení sestavy Využití paměti v nových Visual Studio oknech. Sestava podrobností snímku zobrazuje typy a instance v jednom snímku. Rozdílová sestava snímků porovnává typy a instance ve dvou snímcích.

| Image | Description |
|---|---|
![]() |
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. |
![]() |
Celkový počet objektů v paměti při pořízení snímku. Výběrem tohoto odkazu zobrazíte sestavu podrobností snímku seřazenou podle počtu instancí těchto typů. |
![]() |
Rozdíl mezi celkovou velikostí objektů paměti 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ílů snímků seřazenou podle rozdílu v celkové velikosti instancí těchto typů. |
![]() |
Rozdíl mezi celkovým počtem objektů paměti v tomto snímku a předchozím snímkem. Výběrem tohoto odkazu zobrazíte sestavu rozdílů snímků seřazenou podle rozdílu v celkovém počtu instancí těchto typů. |
Sestavy snímků využití paměti
Když vyberete jeden z odkazů na snímky na stránce s přehledem využití paměti, otevře se na nové stránce sestava snímku.

V sestavě snímku můžete rozbalit položky Typ objektu a zobrazit tak podřízené položky. Názvy instancí jsou jedinečná ID vygenerovaná nástrojem Využití paměti.
Pokud je Typ objektu modrý, můžete ho vybrat a přejít tak na objekt ve zdrojovém kódu v samostatném okně.
Typy, které nelze identifikovat nebo jejichž zapojení do kódu, kterému 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 součástí řetězů vlastnictví vašich objektů.
V sestavě snímku:
Strom spravované haldy zobrazuje typy a instance v sestavě. Při výběru typu nebo instance se zobrazí stromy Cesty ke kořenu a Odkazovaným objektům pro vybranou položku.
Cesty ke kořenovému stromu znázorňují řetěz objektů, které odkazují na typ nebo instanci. Systém uvolňování paměti .NET vyčistí paměť pro objekt pouze v případě, že byly uvolněny všechny odkazy na něj.
Strom odkazovaných typů nebo odkazovaných objektů zobrazuje objekty, na které vybraný typ nebo instance odkazuje.
Filtry stromu sestav
Mnoho typů v aplikacích není pro vývojáře aplikací moc zajímavé. Filtry sestav snímků mohou většinu těchto typů skrýt ve spravované haldě a v cestách ke kořenovým stromům.

Pokud chcete strom filtrovat podle názvu typu, zadejte název do pole Filtr. Filtr nerozlišuje velká a malá písmena a rozpozná zadaný řetězec v jakékoli části názvu typu.
V rozevíracím seznamu Filtr vyberte Sbalit malé objekty a skryjte typy, jejichž velikost (bajty) je menší než 0,5 procenta celkové paměti.
Výběrem Pouze můj kód rozevíracím seznamu Filtr skryjte většinu instancí generovaných externím kódem. Externí typy patří do komponent operačního systému nebo architektury nebo jsou generovány kompilátorem.
Sestavy podrobností snímků
Sestava podrobností snímku popisuje jeden snímek z diagnostické relace. Sestavu otevřete tak, že v podokně snímku vyberete odkaz na velikost nebo objekty.

Oba odkazy otevřou stejnou sestavu. Jediným rozdílem je počáteční pořadí řazení stromu spravované haldy. 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 řazení nebo pořadí řazení.
Strom spravované haldy (sestavy s podrobnostmi o snímku)
Strom spravované haldy obsahuje seznam typů objektů, které jsou v paměti. Rozbalte název typu a zobrazte deset největších instancí typu seřazených podle velikosti. Výběrem typu nebo instance zobrazíte stromy Cesty ke kořenu a Odkazovaným objektům pro vybranou položku.

Strom spravované haldy v sestavě podrobností snímku obsahuje následující sloupce:
| Název | Description |
|---|---|
| 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) | Pro typ velikost všech instancí typu ve 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 velikost jedné instance, včetně velikosti obsažených objektů. |
| Modul | Modul, který obsahuje objekt . |
Cesty ke kořenovému stromu (sestavy s podrobnostmi o snímku)
Cesty ke kořenovému stromu znázorňují řetěz objektů, které odkazují na typ nebo instanci. Systém uvolňování paměti .NET vyčistí paměť pro objekt pouze v případě, že byly uvolněny všechny odkazy na něj.
U typu v cestě ke kořenovému stromu se počet objektů, které na tento typ odkazují, zobrazí ve sloupci Počet odkazů.

Odkazované typy nebo strom odkazovaných objektů (sestavy podrobností snímku)
Strom odkazovaných typů nebo odkazovaných objektů zobrazuje objekty, na které vybraný typ nebo instance odkazuje.

Strom odkazovaných typů v sestavě podrobností snímku obsahuje následující sloupce. Strom odkazovaných objektů neobsahuje sloupec Počet odkazů.
| Název | Description |
|---|---|
| Typ objektu nebo instance | Název typu nebo instance. |
| Počet odkazů | Pro typy počet instancí objektu typu. |
| Velikost (bajty) | Pro typ velikost všech instancí typu, menší 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ílových snímků (rozdílových)
Rozdílová sestava snímků ukazuje změny mezi primárním snímkem a předchozím snímkem. Pokud chcete otevřít rozdílové sestavy, vyberte v podokně snímku jeden z odkazů na rozdíl.
Oba odkazy otevřou stejnou sestavu. Jediným rozdílem je počáteční pořadí řazení stromu spravované haldy v sestavě. Odkaz na velikost seřadí sestavu podle sloupce Inkluzivní rozdíl velikosti (bajty). Odkaz na objekty seřadí sestavu podle sloupce Count Diff (Počet rozdílů). Po otevření sestavy můžete změnit sloupec řazení nebo pořadí řazení.

Strom spravovaných hald (sestavy rozdílů snímků)
Strom spravované haldy obsahuje seznam typů objektů, které jsou v paměti. Můžete rozbalit název typu a zobrazit deset největších instancí typu seřazených podle velikosti. Výběrem typu nebo instance zobrazíte stromy Cesty ke kořenu a Odkazovaným objektům pro vybranou položku.

Strom spravované haldy v sestavě rozdílů snímků má následující sloupce:
| Název | Description |
|---|---|
| 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 pro instanci je prázdné. |
| Velikost (bajty) | Velikost objektů v primárním snímku, menší velikost objektů v objektech. Pro typ jsou velikost (bajty) a celková velikost (bajty) součty 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ší než velikost objektů v instancích. Pole pro instanci je prázdné. |
| Inkluzivní velikost (bajty) | Velikost objektů v primárním snímku, včetně velikosti objektů v objektech. |
| Rozdíl inkluzivní velikosti (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 pro instanci je prázdné. |
| Modul | Modul, který obsahuje objekt . |
Cesty ke kořenovému stromu (sestavy rozdílů snímků)
Cesty ke kořenovému stromu znázorňují řetěz objektů, které odkazují na typ nebo instanci. Systém uvolňování paměti .NET vyčistí paměť pro objekt pouze v případě, že byly uvolněny všechny odkazy na něj.
U typu v cestě ke kořenovému stromu se počet objektů, které na tento typ odkazují, zobrazí ve sloupci Počet odkazů. Rozdíl v počtu oproti předchozímu snímku je ve sloupci Rozdíl odkazu.

Odkazované typy nebo strom odkazovaných objektů (sestavy rozdílů snímků)
Strom odkazovaných typů nebo odkazovaných objektů zobrazuje objekty, na které vybraný typ nebo instance odkazuje.

Strom odkazovaných typů v sestavě rozdílů snímků obsahuje následující sloupce. Strom odkazovaných objektů obsahuje sloupce Instance, Velikost (bajty), Inkluzivní velikost (bajty) a Modul.
| Název | Description |
|---|---|
| Typ objektu nebo instance | Název typu nebo instance objektu. |
| Počet odkazů | 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. Pro typ jsou velikost (bajty) a celková velikost (bajty) součty 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ší než velikost objektů v instancích. |
| Inkluzivní velikost (bajty) | Velikost objektů v primárním snímku, včetně velikosti objektů v objektech. |
| Rozdíl inkluzivní velikosti (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 . |



