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. Pak můžete trasovat zpět do kořene 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.
Nastavení
Vyberte Alt+F2 a otevřete profiler výkonu v sadě Visual Studio.
Zaškrtněte políčko Sledování přidělování objektů .NET.
Nástroj spustíte výběrem tlačítka Start.
Pokud před spuštěním profileru povolíte možnost Začít s pozastavenou kolekcí, nebudou se data shromažďovat, dokud v zobrazení diagnostické relace nevyberete tlačítko 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.
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.
Pochopení vašich dat
V následujícím grafickém zobrazení zobrazuje horní graf počet živých objektů v aplikaci. Dolní graf rozdílového objektu zobrazuje procentuální změnu objektů aplikace. Červené pruhy 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 vymezeny na filtrovaný časový rozsah.
Můžete také přiblížit nebo oddálit graf.
Přidělení
Zobrazení Přidělení zobrazuje umístění objektů, které přidělují paměť a kolik paměti tyto objekty přidělují.
V zobrazení Přidělení se zobrazí následující informace:
Sloupec Typ je seznam tříd a struktur, které zabírají paměť. Poklikáním na typ zobrazte jeho zpětné trasování jako invertovaný strom volání. Pouze v zobrazení Přidělení můžete 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í jenom v zobrazení přidělení, stromu volání a funkcí .
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 myši na sloupec Typ nebo Přidělení a vyberte možnosti Bajty a Průměrná velikost (Bajty) a přidejte je do grafu.
Tyto dva sloupce se podobají součtům (přidělením) a vlastním (přidělením) s výjimkou toho, že místo počtu objektů, které zabírají paměť, zobrazují množství paměti. 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 seřazené. Pro sloupce Název typu a 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 zvýšením nebo snížením číselné hodnoty.
Symboly
Na kartách Přidělení, Strom volání a Funkce se zobrazí následující symboly:
– Typ hodnoty jako celé číslo
– Kolekce typu hodnota, jako je pole celých čísel.
– Typ odkazu, jako je řetězec
– Kolekce odkazového typu, jako je pole řetězců
Strom volání
Zobrazení Stromu volání zobrazuje cesty provádění funkce, které obsahují objekty, které přidělují velkou paměť.
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) (Total Size) (Bajty) zobrazují počet přidělených objektů a množství paměti, které funkce používá, a všechny ostatní funkce, které volá. Sloupec Celková velikost (Bajty) je ve výchozím nastavení skrytý.
- Sloupce Self (Allocations) a Self-Size (Bytes) (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 v 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í Stromu volání, patří:
- Tlačítko Rozbalit horkou 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 většiny přidělení, která vás při vyšetřování vede.
- Tlačítko Zobrazit horkou cestu zobrazuje nebo skryje symboly plamene, které označují, které uzly jsou součástí horké cesty.
Funkce
Zobrazení Funkce zobrazuje procesy, moduly a funkce, které přidělují paměť.
Informace, které se zobrazí v zobrazení Funkce , zahrnují:
Sloupec Název zobrazuje procesy jako uzly nejvyšší úrovně. Pod procesy jsou moduly a pod moduly jsou funkce.
Následující sloupce, které zobrazují stejné informace jako v zobrazení 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)
Kolekce
Zobrazení Kolekce ukazuje, kolik objektů bylo shromážděno nebo zachováno během uvolňování paměti.
V zobrazení Kolekce se zobrazí následující informace.
- Sloupec uvolňování paměti zobrazuje ID této uvolňování paměti v životním cyklu spustitelného souboru.
- Sloupec Generování zobrazuje generování uvolňování paměti.
- Sloupec Typ uvolňování paměti zobrazuje typ tohoto uvolňování paměti.
- Sloupec Důvod uvolňování paměti zobrazuje důvod této události uvolňování paměti.
- Sloupec Pozastavit dobu trvání zobrazuje čas zablokování spuštění, protože uvolňování paměti vyžaduje výhradní použití haldy. U uvolňování paměti na pozadí je tato hodnota malá.
- Sloupec Velikost LOH zobrazuje velikost haldy velkého objektu po spuštění uvolňování paměti.
- Sloupec Velikost POH zobrazuje velikost haldy připnutého objektu po spuštění uvolňování paměti.
- Sloupec Finalizable Surv (MB) zobrazuje počet MB objektů, které mají finalizátory (destruktory), které přežily uvolňování paměti.
- Sloupec Připnuté objekty zobrazuje počet připnutých objektů, u nichž se upřednostní uvolňování paměti.
- Sloupec Shromažďovaný zobrazuje počet objektů, které shromažďuje systém uvolňování paměti.
- Sloupec Survived zobrazuje počet objektů, které přežily po spuštění uvolňování paměti.
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í
Zobrazení Přidělení, stromu volání a funkce obsahují možnosti Zobrazit pouze můj kód a Zobrazit nativní kód a pole filtru.
- Show Just My Code sbaluje systémy, architektury a další neuživatele do rámců [Externí kód], 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 neuživatelský kód.
- Pomocí pole filtru můžete filtrovat sloupec Název nebo Název funkce na základě zadané hodnoty. Do pole zadejte řetězcovou hodnotu. Tabulka pak zobrazuje pouze typy, které tento řetězec obsahují.