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

  1. 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.

  2. 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í).

  3. 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.

  4. Zvolte Využití paměti pomocí nastavení Vybrat nástroje na panelu nástrojů.

    Zobrazení diagnostických nástrojů

  5. 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ů.

    Karta Souhrn 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.

    Povolení snímků

    Zastavit (klávesová zkratka: Shift + F5) a restartovat ladění.

  6. 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.)

    Pořízení snímku

    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í.

  7. Spusťte scénář, který se zastaví u první zarážky.

  8. 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.

  9. Stisknutím klávesy F5 spusťte aplikaci na druhou zarážku.

  10. 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í.

Tabulka souhrnu paměti

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 (Zvýšení využití paměti). Č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.

Sestava spravovaného typu ladicího programu - cesty ke kořenovému adresáři

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ě.

Zobrazení sestavy spravovaných odkazovaných objektů

Pokud chcete zobrazit instance vybraného typu v horním podokně, zvolte ikonu Instance Ikona.

Snímek obrazovky se zobrazením Instance v nástroji Visual Studio paměti s podoknem Instance a podoknem Cesty ke kořenu a odkazovaným objektům

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í nativního typu

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

  • Výběrem ikony instancí (Ikona instanceve 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í.

    Snímek obrazovky se zobrazením Instance v nástroji Visual Studio paměti s podoknem Instance a podoknem 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.

    Zobrazení zásobníků

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ě.

    Volba rozdílové sestavy (změn) změn

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

    Výběr snímku ze seznamu Porovnat s

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:

Rozdílové zobrazení nativních typů

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.