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

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

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

    Snímek obrazovky s vybraným nástrojem Dotnet Object Allocation Tracking

    Snímek obrazovky s vybraným nástrojem Dotnet Object Allocation Tracking

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

  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

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

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

    Snímek obrazovky s kartou Přidělení

    Snímek obrazovky s kartou 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 s nastavením nástroje Dotnet Allocation

Snímek obrazovky s nastavením 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.

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.

Snímek obrazovky s grafem pro nástroj Přidělování dotnet

Snímek obrazovky s grafem pro nástroj 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 vymezeny 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ř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í.

Snímek obrazovky s rozbaleným zobrazením Přidělení

Snímek obrazovky s rozbaleným zobrazením Přidělení

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:

  • Symbol typu hodnoty – Typ hodnoty jako celé číslo

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

  • Symbol typu odkazu – Typ odkazu, jako je řetězec

  • Symbol kolekce typu reference – 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ěť.

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

Snímek obrazovky s rozbalenou horkou cestou

Snímek obrazovky s rozbalenou horkou cestou

Funkce

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

Snímek obrazovky se zobrazením Funkce

Snímek obrazovky se zobrazením Funkce

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.

Snímek obrazovky se zobrazením Kolekce

Snímek obrazovky se zobrazením Kolekce

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.

Snímek obrazovky výsečových grafů v zobrazení Kolekce

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