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
Vyberte Alt+F2 a otevřete profiler výkonu ve Visual Studio.
Zaškrtněte políčko sledování přidělování objektů .NET .
cs-CZ:
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.
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.
cs-CZ:
Vyberte kartu Přidělení. Zobrazí se data přidělení paměti podobná následujícímu.
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í.
Upravte vzorkovací frekvenci podle požadované rychlosti. Tato změna pomáhá zrychlit výkon aplikace během shromažďování a analýzy.
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.
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.
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í.
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:
– typ hodnoty, jako je celé číslo.
– kolekce hodnotového typu, jako je pole celých čísel.
– referenční typ podobný řetězci.
– 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.
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.
Funkce
Zobrazení Functions zobrazuje procesy, moduly a funkce, které přidělují paměť.
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.
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.
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í.