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:
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 (Release ) a jako cíl nasazení vyberte Místní ladicí program systému Windows (nebo místní počítač).
Na řádku nabídek vyberte Profiler výkonu ladění>.
V části Dostupné nástroje vyberte Využití paměti a pak vyberte Spustit.
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 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.
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.
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.
Image | 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četobjektůch Výběrem tohoto odkazu zobrazíte sestavu podrobností snímku seřazenou podle počtu instancí 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ší. 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ů. | |
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ů. |
Image | Popis |
---|---|
Celkový početobjektůch 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 sestavu rozdílu snímku seřazenou podle rozdílu v celkovém počtu instancí 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ší. 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.
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 .
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ů.
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.
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ů.
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.
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í.
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.
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.
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.
Strom Odkazované typy v sestavě rozdílu snímků obsahuje následující sloupce. Odkazovaný strom objektů má 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.