Sdílet prostřednictvím


Analýza využití paměti pomocí nástroje pro přidělování objektů .NET

Pomocí nástroje pro přidělování objektů .NET můžete zjistit, kolik paměti aplikace používá a jaké cesty kódu přidělují nejvíce paměti.

Po spuštění nástroje uvidíte cesty spuštění funkce, ve kterých se přidělují objekty. Poté můžete vystopovat zpět ke kořeni stromu volání, který zabírá nejvíce paměti.

Kurz, který ukazuje, jak zlepšit výkon pomocí nástroje pro přidělování objektů .NET, najdete v případové studii: Příručka začátečníka k optimalizaci kódu.

Sestava

  1. Vyberte Alt+F2 a otevřete profiler výkonu ve Visual Studio.

  2. Zaškrtněte políčko sledování přidělování objektů .NET .

    Snímek obrazovky s vybraným nástrojem pro sledování přidělování objektů Dotnet

    cs-CZ: Snímek obrazovky s vybraným nástrojem pro sledování přidělování objektů v Dotnetu

  3. Nástroj spustíte tak, že vyberete tlačítko Start.

    Pokud povolíte možnost Začít s pozastaveným sběrem před spuštěním profilovacího nástroje, data se nebudou shromažďovat, dokud v zobrazení diagnostické relace nevyberete tlačítko Zahájit záznam.

  4. Po spuštění nástroje si projděte scénář, který chcete v aplikaci profilovat. Pak vyberte Zastavit shromažďování nebo zavřete aplikaci a zobrazte data.

    Snímek obrazovky okna s možností Zastavit kolekci

    cs-CZ: Snímek obrazovky okna zobrazující zastavení kolekce.

  5. Vyberte kartu Přidělení. Zobrazí se data přidělení paměti podobná následujícímu.

    snímek obrazovky karty Přidělení.

    snímek obrazovky karty Přidělení.

Teď můžete analyzovat přidělení paměti objektů.

Během shromažďování může nástroj pro sledování zpomalovat profilovanou aplikaci. Pokud je výkon nástroje pro sledování nebo aplikace pomalý a pokud nepotřebujete sledovat všechny objekty, můžete upravit vzorkovací frekvenci. Uděláte to tak, že na stránce souhrnu profileru vyberete symbol ozubeného kola vedle nástroje pro sledování.

snímek obrazovky nastavení nástroje Dotnet pro alokaci

Snímek obrazovky nastavení nástroje Dotnet Allocation

Upravte vzorkovací frekvenci podle požadované rychlosti. Tato změna pomáhá zrychlit výkon aplikace během shromažďování a analýzy.

snímek obrazovky s upravenou vzorkovací frekvencí

snímek obrazovky s upravenou vzorkovací frekvencí

Další informace o tom, jak nástroj zefektivnit, najdete v tématu Optimalizace nastavení profileru.

Vysvětlení dat

V následujícím grafickém zobrazení zobrazuje horní graf počet živých objektů v aplikaci. Spodní graf objektu delta zobrazuje procentuální změnu objektů v aplikaci. Červené proužky označují, kdy proběhlo uvolňování paměti.

Snímek obrazovky s grafem nástroje pro přidělování Dotnet

snímek grafu na obrazovce nástroje pro přidělování Dotnet

Tabulková data můžete filtrovat tak, aby zobrazovala aktivitu pouze pro zadaný časový rozsah výběrem časového rozsahu. Když to uděláte, informace, které se zobrazí na kartách, jsou omezeny na filtrovaný časový rozsah.

snímek obrazovky s filtrovaným grafem doby přidělení dotnetu

snímek obrazovky s filtrovaným grafem doby přidělení dotnetu

Můžete také přiblížit nebo oddálit graf.

Příděl

Zobrazení Alokace ukazuje umístění objektů, které alokují paměť, a kolik paměti tyto objekty alokují.

snímek obrazovky s rozbaleným zobrazením přidělení

snímek obrazovky s rozbaleným zobrazením přidělení

Následující informace se zobrazí v zobrazení Přidělení:

  • Sloupec Typ je seznam tříd a struktur, které zabírají paměť. Dvojitým kliknutím na typ zobrazíte jeho zpětné trasování jako převrácený strom volání. Pouze v zobrazení Přidělení lze zobrazit položky ve vybrané kategorii, které zabírají paměť.

  • Sloupec Přidělení zobrazuje počet objektů, které zabírají paměť v rámci konkrétního typu přidělení nebo funkce. Tento sloupec se zobrazí pouze v zobrazeních Allocation, Call Treea Functions.

  • Sloupce Bajty a Průměrná velikost (Bajty) se ve výchozím nastavení nezobrazují. Pokud je chcete zobrazit, klikněte pravým tlačítkem na sloupec Typ nebo Přidělení a poté zvolte možnosti Bajty a Průměrná velikost (bajty), abyste je přidali do grafu.

    Dva sloupce se podobají celkem (přidělení) a vlastní (přidělení), s výjimkou, že zobrazují množství zabrané paměti, místo počtu objektů zabírajících paměť. Tyto sloupce se zobrazují jenom v zobrazení Přidělení.

  • Sloupec Název modulu zobrazuje modul, který obsahuje funkci nebo proces, který volá.

Všechny tyto sloupce jsou řaditelné. U sloupců Typ a Název modulu můžete položky seřadit abecedně vzestupně nebo sestupně. Pro přidělení , bajty a průměrnou velikost (bajty) můžete položky seřadit podle vzrůstající nebo klesající číselné hodnoty.

Symboly

Následující symboly se zobrazí na kartách Přidělení, Strom Volánía Funkce:

  • Symbol typu hodnoty – typ hodnoty, jako je celé číslo.

  • symbol kolekce hodnotového typu – kolekce hodnotového typu, jako je pole celých čísel.

  • Symbol typu odkazu – referenční typ podobný řetězci.

  • symbol kolekce typu reference – kolekce typu reference, jako je pole řetězců.

Strom volání

Zobrazení stromu volání ukazuje cesty provádění funkcí, které obsahují objekty přidělující mnoho paměti.

snímek obrazovky se stromem volání

snímek obrazovky se stromem volání

V zobrazení stromu volání se zobrazí následující informace:

  • Sloupec Název funkce zobrazuje proces nebo název funkce obsahující objekty, které přidělují paměť. Zobrazení je založené na úrovni uzlu, který kontrolujete.
  • Sloupce Total (Allocations) a Total Size (Bytes) zobrazují počet přidělených objektů a množství paměti používané funkcí a všemi ostatními funkcemi, které volá. Sloupec Celková velikost (Bajty) je ve výchozím nastavení skrytý.
  • Sloupce Self (Allocations) a Self-Size (Bajty) zobrazují počet přidělených objektů a množství paměti používané jednou vybranou funkcí nebo typem přidělení.
  • Sloupec Průměrná velikost (Bajty) zobrazuje stejné informace jako ve zobrazení Přidělení. Tento sloupec je ve výchozím nastavení skrytý.
  • Sloupec Název modulu zobrazuje modul, který obsahuje funkci nebo proces, který volá.

Mezi další možnosti, které se zobrazují v zobrazení strom volání patří:

  • Tlačítko Rozbalit aktivní cestu zvýrazní cestu provádění funkce, která obsahuje mnoho objektů, které přidělují paměť. Algoritmus začíná na uzlu, který vyberete, a zvýrazní cestu s největším počtem přidělení, čímž vás provází při vašem vyšetřování.
  • Tlačítko Zobrazit horkou cestu zobrazí nebo skryje symboly plamene, které označují, které uzly jsou součástí horké cesty.

Snímek obrazovky s rozbalenou horkou cestou

Snímek obrazovky s rozbalenou horkou cestou

Funkce

Zobrazení Functions zobrazuje procesy, moduly a funkce, které přidělují paměť.

Snímek obrazovky se zobrazením funkcí

snímek obrazovky pohledu funkcí

Informace zobrazené v zobrazení Functions zahrnují:

  • Sloupec Název zobrazuje procesy jako uzly nejvyšší úrovně. Pod procesy jsou moduly a pod moduly jsou funkce.

  • Následující sloupce zobrazují stejné informace jako v zobrazeních Přidělení a stromu volání:

    • celkem (přidělení)
    • Vlastní (přidělení)
    • celková velikost (bajty)
    • Vlastní velikost (bajty)
    • průměrná velikost (bajty)

Sbírka

Zobrazení Sběr ukazuje, kolik objektů bylo shromážděno nebo ponecháno během shromažďování odpadu.

snímek obrazovky (screenshot) se zobrazením kolekce

snímek obrazovky zobrazení kolekce

V zobrazení Kolekce se zobrazí následující informace.

  • Sloupec GC zobrazuje ID této garbage collection v životním cyklu spustitelného souboru.
  • Sloupec Generace zobrazuje generaci uvolňování paměti.
  • Sloupec typ uvolňování paměti zobrazuje typ tohoto uvolňování paměti.
  • Sloupec „Důvod“ zobrazuje příčinu této události uvolňování paměti.
  • Sloupec Délka pozastavení zobrazuje čas, po který bylo spuštění zablokováno, protože garbage collector potřebuje výhradní použití paměťové haldy. U uvolňování paměti na pozadí je tato hodnota malá.
  • Sloupec Velikost LOH zobrazuje velikost haldy velkého objektu poté, co byl spuštěn garbage collector.
  • Sloupec VELIKOST POH zobrazuje velikost haldy připnutých objektů po spuštění garbage collectoru.
  • Sloupec Finalizable Surv (MB) zobrazuje počet MB objektů, které mají finalizátory (destruktory) a přežily proces správy paměti.
  • Sloupec Připnuté objekty zobrazuje počet připnutých objektů, které tato odpadová sběrka propagovala.
  • Sloupec Shromážděno zobrazuje počet objektů, které kolektor odpadu shromáždil.
  • Sloupec Survived zobrazuje počet objektů, které přežily po spuštění garbage collectoru.

Když vyberete řádek, zobrazí se v tomto zobrazení také výsečové grafy pro vizualizaci shromážděných a přeživovaných objektů podle typu.

Snímek obrazovky s výsečovými grafy v zobrazení Kolekce.

Nástroje pro filtrování

Přidělení , volání stromu a funkce obsahují možnosti Zobrazit jen můj kód a Zobrazit nativní kód a také pole filtru.

  • Zobrazit pouze můj kód sbalí systémy, frameworky a další neuživatelský kód do [externího kódu] rámce, abyste se mohli soustředit jenom na svůj kód. Další informace naleznete v tématu Ladění uživatelského kódu pomocí just My Code.
  • Zobrazit nativní kód zobrazuje nativní kód v rámci cíle analýzy a může obsahovat kód bez uživatele.
  • Pomocí pole filtru můžete filtrovat Název nebo název funkce sloupec na základě zadané hodnoty. Do pole zadejte řetězcovou hodnotu. Tabulka pak zobrazuje pouze typy, které tento řetězec obsahují.