Sdílet prostřednictvím


Analýza využití paměti v buildech vydaných verzí (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 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 je podporován v aplikacích technologie .NET, ASP.NET, C++ nebo smíšeném režimu (technologie .NET a nativních).

Nástroj Využití paměti může spouštět při vydání nebo ladění sestavení. V tomto článku si ukážeme, jak používat nástroj Využití paměti v nástroji Visual Studio Performance Profiler, 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 naleznete v tématu Zvolit nástroj pro analýzu paměti.

Nejlepší zkušenosti s touto dokumentací získáte tak, že v seznamu v horní části článku vyberete upřednostňovaný vývojový jazyk nebo modul runtime.

Diagnostické relace využití paměti

Chcete-li spustit diagnostickou relaci využití paměti:

  1. Otevřete projekt v Visual Studio.

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

  2. V nabídce Ladění nastavte konfiguraci řešení na Release a vyberte cíl nasazení.

    Cíl nasazení obvykle odpovídá názvu projektu, což označuje místní nasazení.

  3. Na řádku nabídek vyberteLaděníprofileru výkonu .

  1. Na kartě Flexibilní vyberte Využití paměti a pak vyberte Spustit.

    Snímek obrazovky znázorňující možnost Využití paměti a tlačítko Start

  1. V části Dostupné nástroje, vyberte možnost Využití pamětia poté zvolte Start. Zahajte diagnostickou relaci využití paměti.

Poznámka

U některých typů project, například CMake, je nutné nastavit cíl spuštění na Executable. Další informace najdete v tématu Které nástroje jsou podporovány pro project?.

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 okna Diagnostické nástroje v profileru výkonu Visual Studio zobrazující graf časové osy využití paměti aplikace.

Screenshot okna Diagnostické nástroje v profileru výkonu Visual Studio zobrazující graf časové osy využití paměti aplikace.

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 únik 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. Je dobré získat základní snímek aplikace, než se objeví potíže s pamětí. 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.

snímek obrazovky s pořízením snímku

Zavřít diagnostickou relaci

Chcete-li zastavit monitorovací relaci bez vytvoření sestavy, jednoduše zavřete okno diagnostiky. Pokud chcete vygenerovat zprávu po dokončení shromažďování dat nebo po pořízení snímků, vyberte Zastavit shromažďování.

snímek obrazovky zastavení sběru

snímek obrazovky zastavení sběru

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 oprava problémů.

Zprávy o využití paměti

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

Snímek obrazovky stránky s přehledem v nástroji pro využití paměti v profileru výkonu Visual Studio, který zobrazuje graf využití paměti a čtyři podokna snímků.

Screenshot stránky s přehledem v nástroji Využití paměti v profileru výkonu Visual Studio zobrazující graf využití paměti a dvě podokna snímků.

Snímky využití paměti

Čísla v podoknech Snímek 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í sestavy Memory Usage v nových oknech Visual Studio. Sestava podrobných informací o snímku uvádí typy a instance v jednom snímku. Seznam rozdílu snímků porovnává typy a instance ve dvou snímcích.

Snímek obrazovky s odkazy zobrazení snímků

Ve C++ je sloupec Objects (Diff) pojmenován Allocations (Diff).

Obrázek Popis
krok 1průvodce procesem 1 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í typů.
krok 2průvodce procesem 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 diferenciální zprávu seřazenou podle rozdílu v celkovém počtu výskytů typů.
krok 3průvodce procesem 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.
krok 4 – průvodce procesem4 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ší. Základní čára označuje, ž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í typů.

Sestavy spravovaných typů

Zvolte aktuální propojení buňky Objekty (Diff) v souhrnné tabulce Využití paměti.

Snímek obrazovky sestavy spravovaného typu.Sestava spravovaného typu

Poznámka

Pro technologie .NET kód je ikona Přehled podrobností (Ikona instance ve sloupci Typ objektuDBG_MMA_InstancesIcon) k dispozici pouze při použití nástroje Debugger-integrated Memory Usage nebo při otevření snímku hromady a zvolení Ladění spravované paměti.

Horní podokno zobrazuje počet a velikost typů snímku, včetně velikosti všech objektů, na které odkazuje typ (Inkluzivní velikost).

Strom Cesty ke kořeni v dolním podokně zobrazuje objekty, které odkazují na typ vybraný v horním podokně. technologie .NET garbage collector uvolňuje paměť objektu pouze tehdy, když byl uvolněn poslední typ, který na něj odkazuje. Další informace o použití stromu Cesty ke kořenům naleznete v tématu Analýza horké cesty ke kořenům.

Snímek obrazovky sestavy spravovaného typu.Sestava spravovaného typu

Poznámka

Kód technologie .NET: Ikona Zobrazit instance (The instance icon in the Object Type columnIkona instance ve sloupci Typ objektu) je k dispozici pouze při použití nástroje debugger-integrated Memory Usage nebo při otevření snímku heap a zvolíte Ladit spravovanou paměť.

Horní podokno zobrazuje počet a velikost typů snímku, včetně velikosti všech objektů, na které odkazuje typ (Inkluzivní velikost).

Strom Cesty ke kořeni v dolním podokně zobrazuje objekty, které odkazují na typ vybraný v horním podokně. technologie .NET garbage collector uvolňuje paměť objektu pouze tehdy, když byl uvolněn poslední typ, který na něj odkazuje. Další informace o použití stromu Cesty ke kořenům naleznete v tématu Analýza horké cesty ke kořenům.

Strom zobrazení Referencované typy zobrazuje reference držené typem vybraným v horním podokně.

snímek obrazovky zprávy o odkazovaných objektech

Strom zobrazení Referencované typy zobrazuje reference držené typem vybraným v horním podokně.

snímek obrazovky zprávy o odkazovaných objektech

Filtry stromu sestav

Mnoho typů v aplikacích není nutné, aby vývojáři aplikací prozkoumali problémy s pamětí. Filtry sestav snímků můžou skrýt většinu těchto typů v spravované paměti a cesty ke kořenům.

Možnosti řazení a filtrovánívyužití paměti řazení a filtrování

  • Chcete-li 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.

  • Vyberte Pouze můj kód v rozbalovací nabídce Filtr, abyste skryli 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.

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

Sestavy nativních typů

V okně Diagnostické nástroje zvolte odkaz v aktuální buňce Přidělená paměť (Rozdíl) nebo Velikost haldy (Rozdíl) v tabulce Souhrn využití paměti.

snímek obrazovky nativního zobrazení typu

snímek obrazovky nativního zobrazení typu

Zobrazení Typy zobrazuje počet a velikost typů v snímku.

  • Výběrem ikony Zobrazit podrobnosti vedle vybraného typu zobrazíte informace o objektech vybraného typu ve snímku.

    Výhled Instance zobrazuje každou instanci vybraného typu. Výběrem instance se zobrazí zásobník volání vedoucí k vytvoření instance v podokně Zásobník volání přidělení. (Tyto informace jsou dostupné pouze při ladění.)

    Snímek obrazovky zobrazení instancí a přidělením zásobníku volání

  • Výběrem ikony Zobrazit instance vedle vybraného typu zobrazíte informace o objektech vybraného typu ve snímku.

    Výhled Instance zobrazuje každou instanci vybraného typu. Výběrem instance se zobrazí zásobník volání vedoucí k vytvoření instance v podokně Zásobník volání přidělení. (Tyto informace jsou dostupné pouze při ladění.)

    Snímek obrazovky zobrazení instancí a přidělením zásobníku volání

  • Zvolte Stacks a zobrazte zásobník přidělení pro vybraný typ.

    snímek obrazovky zobrazení Zásobníků

  • Zvolte Stacks a zobrazte zásobník přidělení pro vybraný typ.

    snímek obrazovky zobrazení Zásobníků

Přehledy využití paměti

Pro spravovanou paměť poskytuje nástroj Analýza paměti také několik výkonných integrovaných automatických přehledů. V sestavách spravovaných typů vyberte kartu Insights a zobrazí se příslušné automatické poznatky, jako jsou duplicitní řetězce, řídká polea úniky obslužných rutin události .

Snímek obrazovky nástroje Využití paměti se zobrazením přehledu.Přehled využití paměti

Snímek obrazovky nástroje Využití paměti se zobrazením přehledu.Přehled využití paměti

Oddíl Duplicitní řetězce ukazuje seznam řetězců, které jsou přidělovány několikrát na hromadě. Kromě toho tato část ukazuje celkovou ztrátu paměti, tj. (počet instancí – 1) krát velikost řetězce.

Oddíl řídká pole ukazuje pole, která jsou většinou naplněna nulovými prvky, což může být neefektivní, pokud jde o výkon a využití paměti. Nástroj pro analýzu paměti automaticky rozpozná tato pole a ukáže vám, kolik paměti je zbytečně využito kvůli těmto nulovým hodnotám.

Oddíl Úniky paměti z obslužných rutin, dostupný ve Visual Studio 2022 verze 17.9 Preview 1, ukazuje potenciální úniky paměti, které mohou nastat, když se jeden objekt připojí k události jiného objektu. Pokud vydavatel události přežije odběratele, zůstane odběratel naživu, i když na něj nejsou žádná další reference. To může vést k únikům paměti, kdy není správně uvolněna nevyužitá paměť, což způsobí, že aplikace bude postupem času využívat více paměti.

U některých typů je známo, že mají pole, která lze přečíst, aby určily velikost nativní paměti, kterou drží. Karta Insights zobrazuje falešné nativní paměťové uzly v grafu objektů, které jsou zachovány nadřazenými objekty tak, aby je uživatelské rozhraní rozpoznalo a zobrazilo jejich velikost a referenční graf.

snímek obrazovky s nativním zobrazením přehledu v nástroji Využití pamětizobrazení nativního přehledu v nástroji Využití paměti

Zprávy o změnách (rozdílech)

  • Na stránce Přehled využití paměti zvolte odkaz na změnu v buňce podokna Snímek.

    Snímek obrazovky s odkazem pro výběr změny v buňce

  • Vyberte snímek ze seznamu Pro porovnání s spravovanou nebo nativní sestavou.

    Snímek obrazovky seznamu Porovnat s

    Snímek obrazovky s volbou snímku ze seznamu 'Porovnat s'.

Sestava změn přidá do základní sestavy sloupce (označené (Rozdíl)), které ukazují rozdíl mezi hodnotou základního snímku a srovnávacím snímkem. Takto může vypadat zpráva rozdílu zobrazení nativního typu:

snímek obrazovky se zobrazením rozdílu nativních typů.zobrazení rozdílu nativních typů

snímek obrazovky se zobrazením rozdílu nativních typů.zobrazení rozdílu nativních typů

Horní podokno zobrazuje počet a velikost typů snímku, včetně velikosti všech objektů, na které odkazuje typ (Inkluzivní velikost).