Analysera minnesanvändning med hjälp av .NET-objektallokeringsverktyget
Du kan se hur mycket minne din app använder och vilka kodsökvägar som allokerar mest minne med hjälp av .NET-objektallokeringsverktyget.
När du har kört verktyget kan du se de körvägar för funktioner där objekt allokeras. Du kan sedan gå tillbaka till roten av anropsträdet som tar upp mest minne.
En självstudiekurs som visar hur du förbättrar prestandan med hjälp av .NET-objektallokeringsverktyget finns i Fallstudie: Nybörjarguide för att optimera kod.
Inställning
Välj Alt+F2 för att öppna Prestandaprofiler i Visual Studio.
Markera kryssrutan .NET-objektallokeringsspårning.
Välj knappen Starta för att köra verktyget.
Om du aktiverar alternativet Starta med en pausad samling innan profileraren startas, samlas inte data in förrän du väljer knappen Record i diagnostiksessionsvyn.
När verktyget har börjat köras går du igenom det scenario som du vill profilera i din app. Välj sedan Stoppa insamling eller stäng din app för att se dina data.
Välj fliken Allokering. Minnesallokeringsdata som liknar följande visas.
Nu kan du analysera minnesallokeringen av objekten.
Under samlingen kan spårningsverktyget göra den profilerade appen långsammare. Om prestandan för spårningsverktyget eller appen är långsam, och om du inte behöver spåra alla objekt, kan du justera samplingsfrekvensen. Det gör du genom att välja kugghjulssymbolen bredvid spårningsverktyget på sammanfattningssidan för profilerare.
Justera samplingsfrekvensen till den hastighet du vill ha. Den här ändringen hjälper till att påskynda appens prestanda under insamling och analys.
Mer information om hur du gör verktyget mer effektivt finns i Optimera profileringsinställningar.
Förstå dina data
I följande grafiska vy visar det översta diagrammet antalet levande objekt i din app. Diagrammet objektsdelta längst ned visar procentuell förändring av appobjekt. Röda staplar anger när skräpinsamlingen ägde rum.
Du kan filtrera tabelldata för att endast visa aktivitet under ett angivet tidsintervall genom att välja ett tidsintervall. När du gör detta begränsas informationen som visas på flikarna till det filtrerade tidsintervallet.
Du kan också zooma in eller ut ur diagrammet.
Tilldelning
Vyn Allokering visar platsen för objekt som allokerar minne och hur mycket minne dessa objekt allokerar.
Följande information visas i vyn Tilldelning:
Kolumnen Type är en lista över klasser och strukturer som tar upp minne. Dubbelklicka på en typ för att visa dess backtrace som ett inverterat anropsträd. Endast i vyn Allokering kan du se objekt inom den valda kategorin som tar upp minne.
Kolumnen Allokeringar visar antalet objekt som tar upp minne inom en viss allokeringstyp eller funktion. Den här kolumnen visas bara i vyerna Allocation, Call Treeoch Functions.
Kolumnerna byte och genomsnittlig storlek (byte) visas inte som standard. Om du vill visa dem högerklickar du på kolumnen Typ eller Allokeringar och väljer sedan Bytes och Genomsnittlig storlek (Bytes) för att lägga till dem som alternativ i diagrammet.
De två kolumnerna liknar Total (Allokeringar) och Self (Allokeringar), förutom att de visar mängden minne som tas upp i stället för antalet objekt som tar upp minne. Dessa kolumner visas bara i Allokering-vyn.
Kolumnen Modulnamn visar modulen som innehåller den funktion eller process som anropas.
Alla dessa kolumner kan sorteras. För kolumnerna Type och Module Name kan du sortera objekt i alfabetisk ordning i antingen stigande eller fallande ordning. När det gäller tilldelningar, Byte och genomsnittlig storlek (Byte), kan du sortera objekt efter stigande eller fallande numeriska värden.
Symboler
Följande symboler visas på flikarna Allocation, Call Treeoch Functions:
– en värdetyp som heltal
– en värdetypssamling som en matris med heltal
– en referenstyp som en sträng
– en samling av referenstyp som en matris med strängar
Samtalsträd
Vyn Anropsträd visar de sökvägar för funktionskörning som innehåller objekt som allokerar mycket minne.
Följande information visas i vyn Samtalsträd:
- Kolumnen funktionsnamn visar processen eller namnet på funktionen som innehåller objekt som allokerar minne. Visningen baseras på nivån för den nod som du inspekterar.
- Kolumnerna Total (Allokeringar) och total storlek (byte) visar antalet allokerade objekt och mängden minne som används av en funktion och alla andra funktioner som den anropar. Kolumnen Total storlek (byte) döljs som standard.
- Kolumnerna Self (Allokeringar) och Self-Size (byte) visar antalet allokerade objekt och mängden minne som används av en enskild vald funktion eller allokeringstyp.
- Kolumnen Genomsnittlig storlek (byte) visar samma information som i Allokering-vyn. Den här kolumnen är dold som standard.
- Kolumnen Modulnamn visar modulen som innehåller den funktion eller process som anropas.
Ytterligare alternativ som visas i vy Anropsträd inkluderar:
- Knappen Expandera frekvent sökväg visar en funktionskörningsväg som innehåller många objekt som allokerar minne. Algoritmen startar vid en nod som du väljer och markerar sökvägen för flest allokeringar, som vägleder dig i din undersökning.
- Knappen Visa frekvent sökväg visar eller döljer flamsymbolerna som anger vilka noder som är en del av den heta sökvägen.
Funktioner
Vyn Functions visar processer, moduler och funktioner som allokerar minne.
Information som visas i vyn Functions innehåller:
Kolumnen Name visar processer som noder på högsta nivå. Under processerna finns moduler och under modulerna finns funktioner.
Följande kolumner, som visar samma information som i Allokering och Samtalsträd vyerna:
- Totalt (allokering)
- Själv (allokeringar)
- total storlek (byte)
- egen storlek (byte)
- genomsnittlig storlek (byte)
Samling
Vyn Collection visar hur många objekt som samlades in eller behölls under skräphanteringen.
Följande information visas i samlingens vy .
- Kolumnen GC visar ID:t för den här skräpinsamlingen i den körbara filens livscykel.
- Kolumnen Generation visar genereringen av skräpinsamlingen.
- Kolumnen GC Type visar typen av den här skräpinsamlingen.
- Kolumnen GC Reason visar orsaken till den här skräpinsamlingshändelsen.
- Kolumnen Pausa varaktighet visar den tid då körningen blockerades eftersom skräpinsamlaren behöver exklusiv användning av heapen. För en skräpinsamling i bakgrunden är det här värdet litet.
- Kolumnen LOH Size visar storleken på den stora objekthögen efter att skräpinsamlaren kördes.
- Kolumnen POH Size visar storleken på heapen för fastnålat objekt efter att skräpinsamlingen körts.
- Kolumnen Finalizable Surv (MB) visar antalet MB av objekt som har slutförare (destruktorer) som överlevde skräpinsamlingen.
- Kolumnen Fästa objekt visar antalet fästa objekt som den här skräpsamlingen har framhävt.
- Kolumnen Collected visar antalet objekt som skräpinsamlaren har samlat in.
- Kolumnen Survived visar antalet objekt som överlevde efter att skräpinsamlaren kördes.
När du väljer en rad visar den här vyn även cirkeldiagram för att visualisera insamlade och efterlämnade objekt efter typ.
Filtreringsverktyg
Allocations, Call Treeoch Functions-vyerna innehåller alla Visa just min kod och Visa alternativ för intern kod och en filterruta.
- Show Just My Code komprimerar system, ramverk och annan icke-användarkod i [extern kod] ramar så att du kan fokusera bara på din kod. Mer information finns i Felsöka användarkod med Just My Code.
- Visa nativ kod visar nativ kod inom analysmålet och kan inkludera icke-användarkod.
- Med filterrutan kan du filtrera ned Namn eller Funktionsnamn kolumn baserat på det värde du anger. Ange ett strängvärde i rutan. Tabellen visar sedan endast typer som innehåller strängen.