Měření paměti profilu v sadě Visual Studio
Při ladění pomocí diagnostického nástroje Využití paměti integrovaného v ladicím programu vyhledejte nevrácenou a neefektivní paměť. Nástroj Využití paměti umožňuje pořešte jeden nebo více snímků haldy spravované a nativní paměti, abyste lépe pochopili dopad typů objektů na využití paměti. Využití paměti můžete analyzovat také bez připojeného ladicího programu nebo cílením na spuštěnou aplikaci. Další informace najdete v tématu Spuštění nástrojů pro profilaci s ladicím programem nebo bez něj.
I když můžete v nástroji Využití paměti kdykoli shromažďovat snímky paměti, můžete pomocí ladicího programu Visual Studio řídit, jak se aplikace spouští při zkoumání problémů s výkonem. Nastavení zarážek, krokování, přerušení všech a dalších akcí ladicího programu vám může pomoct zaměřit se na nejdůležitější cesty kódu při zkoumání výkonu. Provádění těchto akcí, když je aplikace spuštěná, může eliminovat šum v kódu, který vás nebude zajímat, a může výrazně zkrátit dobu, kterou vám zabere diagnostika problému.
Důležité
Diagnostické nástroje integrované s ladicím programem jsou podporované pro vývoj v .NET v Visual Studio, včetně aplikací ASP.NET, ASP.NET Core, vývoje nativních aplikací/aplikací C++ a aplikací ve smíšeném režimu (.NET a nativních). Windows 8 a novější se vyžaduje ke spuštění nástrojů pro profilaci pomocí ladicího programu (Diagnostické nástroje okno).
V tomto kurzu:
- Pořizování snímků paměti
- Analýza dat o využití paměti
Pokud vám využití paměti neposkytuje data, která potřebujete, další nástroje pro profilaci v Profiler výkonu poskytují různé druhy informací, které vám můžou být užitečné. V mnoha případech může být kritickým bodem vaší aplikace něco jiného než paměť, jako je procesor, uživatelské rozhraní pro vykreslování nebo doba žádosti o síť.
Poznámka
Podpora vlastního alokátoru Nativní profiler paměti funguje tak, že shromažďuje data událostí trasování událostí pro Windows přidělení vygenerovaná za běhu. Alokátory v CRT a Windows SDK byly anotovány na úrovni zdroje, aby bylo možné zachytit jejich data přidělení. Pokud píšete vlastní alokátory, můžete všechny funkce, které vracejí ukazatel na nově přidělenou paměť haldy, dekorovat pomocí __declspec(alokátoru), jak je vidět v tomto příkladu pro myMalloc:
__declspec(allocator) void* myMalloc(size_t size)
Shromažďování dat o využití paměti
Otevřete projekt, který chcete ladit v Visual Studio a nastavte zarážku v aplikaci v okamžiku, kdy chcete začít zkoumat využití paměti.
Pokud máte oblast, ve které máte podezření na problém s pamětí, nastavte první zarážku před tím, než dojde k problému s pamětí.
Tip
Vzhledem k tomu, že může být náročné zaznamenat profil paměti operace, která vás zajímá, když vaše aplikace často přiděluje a delokuje paměť, nastavte zarážky na začátku a konci operace (nebo krokování operací) a vyhledejte přesný bod, kdy se paměť změnila.
Nastavte druhou zarážku na konci funkce nebo oblasti kódu, kterou chcete analyzovat (nebo když dojde k podezřelému problému s pamětí).
Okno Diagnostické nástroje se zobrazí automaticky (pokud jste ho nevypnuli). Pokud chcete okno znovu zobrazit, klikněte na > Ladit Windows > Zobrazit Diagnostické nástroje.
Zvolte Využití paměti pomocí nastavení Vybrat nástroje na panelu nástrojů.

Klikněte na Ladit / Spustit ladění (nebo na panelu nástrojů stiskněte Start nebo F5).
Jakmile se aplikace načte, zobrazí se souhrnný přehled diagnostických nástrojů.

Poznámka
Protože shromažďování dat paměti může ovlivnit výkon ladění nativních aplikací nebo aplikací ve smíšeném režimu, jsou snímky paměti ve výchozím nastavení zakázané. Pokud chcete povolit snímky v nativních nebo smíšených aplikacích, spusťte ladicí relaci (klávesová zkratka: F5). Jakmile se Diagnostické nástroje, zvolte kartu Využití paměti a pak zvolte Profilace haldy.

Zastavit (klávesová zkratka: Shift + F5) a restartovat ladění.
Pokud chcete vytvořit snímek na začátku ladicí relace, na panelu nástrojů souhrnu využití paměti zvolte Poř nahánět snímek. (Tady vám může také pomoct nastavit zarážku.)

Tip
Pokud chcete vytvořit směrný plán pro porovnání paměti, zvažte pořízení snímku na začátku relace ladění.
Spusťte scénář, který se zastaví u první zarážky.
Zatímco je ladicí program pozastavený na první zarážce, na panelu nástrojů souhrnu využití paměti zvolte Poř nahánět snímek.
Stisknutím klávesy F5 spusťte aplikaci na druhou zarážku.
Teď pořizte další snímek.
Teď můžete začít analyzovat data.
Analýza dat o využití paměti
V řádcích souhrnné tabulky Využití paměti jsou uvedeny snímky pořízené během relace ladění a odkazy na podrobnější zobrazení.

Název sloupců závisí na režimu ladění, který zvolíte ve vlastnostech projektu: .NET, nativní nebo smíšené (.NET i nativní).
Sloupce Objects (Diff) a Allocations (Diff) zobrazují počet objektů v .NET a nativní paměť při pořízení snímku.
Ve sloupci Velikost haldy (diff) se zobrazuje počet bajtů v rozhraní .NET a nativních haldách.
Po pořízení více snímků buňky souhrnné tabulky zahrnují změnu hodnoty mezi snímkem řádku a předchozím snímkem.
Pokud chcete analyzovat využití paměti, klikněte na jeden z odkazů, který otevře podrobnou sestavu využití paměti:
- Pokud chcete zobrazit podrobnosti o rozdílu mezi aktuálním snímkem a předchozím snímkem, zvolte odkaz pro změnu nalevo od šipky (
). Červená šipka označuje zvýšení využití paměti a zelenou šipku, která značí pokles.
Tip
Aby bylo možné rychleji identifikovat problémy s pamětí, seřadí se rozdílové sestavy podle typů objektů, které zvýšily celkový počet nejvíce (klikněte na odkaz pro změnu ve sloupci Objekty (diff) nebo které zvýšily nejvíce v celkové velikosti haldy (klikněte na odkaz pro změnu ve sloupci Velikost haldy (diff).
Pokud chcete zobrazit podrobnosti pouze o vybraném snímku, klikněte na odkaz beze změny.
Sestava se zobrazí v samostatném okně.
Sestavy spravovaných typů
Zvolte aktuální propojení buňky Objects (Diff) nebo Allocations (Diff) (Rozdíly) v tabulce souhrnu využití paměti.

Horní podokno zobrazuje počet a velikost typů ve snímku, včetně velikosti všech objektů, na které odkazuje typ (včetně velikosti).
Cesta ke kořenovému stromu v dolním podokně zobrazuje objekty, které odkazují na typ vybraný v horním podokně. Systém uvolňování paměti .NET vyčistí paměť pro objekt pouze v případě, že byl uvolněn poslední typ, který na něj odkazuje.
Ve stromu Odkazované objekty se zobrazí odkazy, které jsou uchované typem vybraným v horním podokně.

Pokud chcete zobrazit instance vybraného typu v horním podokně, zvolte ![]()

Zobrazení Instance zobrazuje instance vybraného objektu ve snímku v horním podokně. V podokně Cesty ke kořenovým a odkazovaným objektům se zobrazují objekty, které odkazují na vybranou instanci, a typy, na které vybraná instance odkazuje. Když se ladicí program zastaví v okamžiku pořízení snímku, můžete na buňku Value najet myší a zobrazit hodnoty objektu v popisku.
Sestavy nativního typu
Zvolte aktuální propojení buňky Allocations (Diff) nebo Heap Size (Diff) v souhrnné tabulce Využití paměti v okně Diagnostické nástroje paměti.

Zobrazení typů zobrazuje počet a velikost typů ve snímku.
Výběrem ikony instancí (
ve sloupci Typ objektu ) vybraného typu zobrazíte informace o objektech vybraného typu ve snímku.V zobrazení Instance se zobrazí všechny instance vybraného typu. Při výběru instance se zobrazí zásobník volání, který vyústil ve vytvoření instance v podokně Zásobník volání přidělení.

V seznamu Režim zobrazení zvolte Zobrazení zásobníků a zobrazte zásobník přidělení pro vybraný typ.

Změna (rozdílové) sestavy
Zvolte odkaz na změnu v buňce souhrnné tabulky na kartě Využití paměti v Diagnostické nástroje okně.

V seznamu Porovnat s spravované nebo nativní sestavy zvolte snímek.

Sestava změn přidá sloupce (označené pomocí (Diff)) do základní sestavy, které zobrazují rozdíl mezi základní hodnotou snímku a snímkem porovnání. Rozdílová sestava zobrazení nativního typu může vypadat takhle:

Blogy a videa
Analýza procesoru a paměti během ladění
Visual C++ blog: Profilace paměti v Visual C++ 2015
Další kroky
V tomto kurzu jste se naučili shromažďovat a analyzovat data o využití paměti. Pokud jste už dokončili prohlídku profileru, měli byste se rychle podívat, jak analyzovat využití procesoru ve vašich aplikacích.