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 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 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 profileru výkonu sady Visual Studio , který se doporučuje pro sestavení verzí určených k uvolnění. 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:
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í).
V nabídce Ladění nastavte konfiguraci řešení na Release a jako cíl nasazení vyberte Ladicí program systému Windows (nebo Místní počítač).
Na řádku nabídek vyberteLadění>profileru výkonu .
V části Dostupné nástroje, vyberte možnost Využití pamětia poté zvolte Start.
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.
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.
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í.
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í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é v nových oknech sady Visual Studio otevírají podrobná zobrazení sestavy Využití paměti. 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.
Ve C++ je sloupec Objects (Diff) pojmenován Allocations (Diff).
Obraz | Popis |
---|---|
![]() |
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ů. |
![]() |
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ů. |
![]() |
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. |
![]() |
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ů. |
Obraz | Popis |
---|---|
![]() |
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 výskytů jednotlivých typů. |
![]() |
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ší. Výchozí stav 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ů. |
![]() |
Rozdíl mezi celkovým počtem paměťových objektů v tomto snímku a předchozím snímkem. Kliknutím na tento odkaz zobrazíte zprávu o rozdílech ve snímku. Je seřazeno dle rozdílu v celkovém počtu instancí typů. |
Sestavy spravovaných typů
Vyberte aktuální odkaz buňky Objektů (Diff) v souhrnné tabulce využití paměti.
Poznámka
Pro kód .NET je ikona Zobrazit instance (Ikona instance ve sloupci Typ objektu) dostupná pouze při použití integrovaného nástroje Využití paměti v debuggeru nebo při otevření snímku haldy a volbě 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).
Ve stromu Cesty ke kořenovému v dolním podokně se zobrazí objekty, které odkazují na typ vybraný v horním podokně. .NET garbage collector vyčistí paměť pro objekt pouze tehdy, když je 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.
Horní podokno zobrazuje počet a velikost typů snímku, včetně velikosti všech objektů, na které odkazuje typ (Inkluzivní velikost).
Ve stromu Cesty ke kořenu v dolním podokně se zobrazují objekty, které odkazují na typ vybraný v horním podokně. .NET garbage collector uvolní paměť pro objekt pouze tehdy, když byl uvolněn poslední typ, který na něj odkazuje.
Strom zobrazení Referencované typy zobrazuje reference držené typem vybraným v horním podokně.
Strom Odkazované typy zobrazí odkazy, které jsou uloženy typem vybraným v horním podokně.
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.
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ů
Zvolte aktuální odkaz buňky přidělení (Rozdíl) nebo velikost haldy (Rozdíl) v tabulce Souhrn využití paměti v okně Diagnostické nástroje.
Zobrazení Typy zobrazuje počet a velikost typů v snímku.
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í, který vedl k vytvoření instance v podokně Zásobník volání přidělení. (Tyto informace jsou dostupné pouze při ladění.)
Zvolte ikonu instance (
) vybraného typu, aby se zobrazily informace o objektech vybraného typu ve snímku.
Zobrazení Instance zobrazí každou instanci vybraného typu. Výběrem instance se zobrazí zásobník volání, který vedl ke vzniku instance, v okně Zásobník volání přidělení.
V seznamu Režim zobrazení zvolte Zobrazení zásobníků k zobrazení zásobníku přidělení pro vybraný typ.
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 .
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 zobrazuje pole, která jsou většinou naplněna nulovými prvky a která mohou být neefektivní z hlediska výkonu 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.
Část Úniky paměti v obslužných rutinách událostí, která je dostupná v sadě Visual Studio 2022 verze 17.9 Preview 1, ukazuje potenciální úniky paměti, které mohou nastat, když se jeden objekt přihlásí k odběru 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ší odkazy. 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.
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.
Vyberte snímek v seznamu Porovnat s spravovanou nebo nativní zprávou.
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:
Horní podokno zobrazuje počet a velikost typů ve snímku, včetně velikosti všech objektů, na které odkazuje typ (Celková velikost).