Geheugengebruik analyseren met behulp van het hulpprogramma .NET-objecttoewijzing
U kunt zien hoeveel geheugen uw app gebruikt en welke codepaden het meeste geheugen toewijzen met behulp van het hulpprogramma .NET-objecttoewijzing.
Nadat u het hulpprogramma hebt uitgevoerd, ziet u de uitvoeringspaden van de functie waar objecten worden toegewezen. Vervolgens kunt u terug traceren naar de wortel van de aanroepstructuur die het meeste geheugen in beslag neemt.
Zie Case study: Beginnersgids voor het optimaliseren van codevoor een zelfstudie waarin wordt getoond hoe u de prestaties kunt verbeteren met behulp van het hulpprogramma .NET Object Allocation.
Installatie
Selecteer Alt+F2 om de Performance Profiler in Visual Studio te openen.
Schakel het selectievakje .NET Objecttoewijzing bijhouden in.
Selecteer de knop Start om het hulpprogramma uit te voeren.
Als u de optie Starten met verzameling gepauzeerd inschakelt voordat u de profiler start, worden de gegevens pas verzameld wanneer u de knop Record selecteert in de diagnostische sessie weergave.
Nadat het hulpprogramma is gestart, doorloopt u het scenario dat u in uw app wilt profilen. Selecteer vervolgens Verzameling stoppen of sluit uw app om uw gegevens te bekijken.
Selecteer het tabblad Toewijzing. Geheugentoewijzingsgegevens die er ongeveer als volgt uitzien, worden weergegeven.
U kunt nu de geheugentoewijzing van de objecten analyseren.
Tijdens het verzamelen kan het hulpprogramma voor bijhouden de geprofileerde app vertragen. Als de prestaties van het hulpprogramma voor bijhouden of de app traag zijn en u niet elk object hoeft bij te houden, kunt u de steekproeffrequentie aanpassen. Hiervoor selecteert u het tandwielsymbool naast de tracker op de profiler-samenvattingspagina.
Pas de steekproeffrequentie aan op de gewenste snelheid. Deze wijziging helpt de prestaties van uw app tijdens het verzamelen en analyseren te versnellen.
Zie Profiler-instellingen optimaliserenvoor meer informatie over het efficiënter maken van het hulpprogramma.
Inzicht in uw gegevens
In de volgende grafische weergave toont de bovenste grafiek het aantal live-objecten in uw app. De onderste Object delta grafiek toont de percentagewijziging van app-objecten. Rode balken geven weer wanneer de vuilnisophaling heeft plaatsgevonden.
U kunt de gegevens in tabelvorm filteren om alleen activiteit voor een opgegeven tijdsbereik weer te geven door een tijdsbereik te selecteren. Wanneer u dit doet, is de informatie die op de tabbladen wordt weergegeven, afgestemd op het gefilterde tijdsbereik.
U kunt ook in- of uitzoomen op de grafiek.
Toewijzing
In de weergave Toewijzing ziet u de locatie van objecten die geheugen toewijzen en hoeveel geheugen deze objecten toewijzen.
De volgende informatie wordt weergegeven in de weergave Toewijzing:
De kolom Type is een lijst met klassen en structuren die geheugen in beslag nemen. Dubbelklik op een type om de backtrace weer te geven als een omgekeerde aanroepstructuur. In de toewijzingsweergave alleen ziet u items in de geselecteerde categorie die geheugen in beslag nemen.
In de kolom Toewijzingen wordt het aantal objecten weergegeven dat geheugen in beslag neemt binnen een bepaald toewijzingstype of een bepaalde functie. Deze kolom wordt alleen weergegeven in de Allocation, Call Treeen Functions weergaven.
De kolommen Bytes en Gemiddelde Grootte (Bytes) worden niet standaard weergegeven. Als u ze wilt weergeven, klikt u met de rechtermuisknop op de Type of Toewijzingen kolom en selecteert u vervolgens de opties Bytes en Gemiddelde grootte (bytes) om ze aan de grafiek toe te voegen.
De twee kolommen zijn vergelijkbaar met totaal (toewijzingen) en zelf (toewijzingen), maar ze geven de hoeveelheid in beslag genomen geheugen weer in plaats van het aantal objecten dat geheugencapaciteit gebruikt. Deze kolommen worden alleen weergegeven in de weergave Toewijzing.
In de kolom modulenaam wordt de module weergegeven die de functie of het aanroepende proces bevat.
Al deze kolommen kunnen worden gesorteerd. Voor de type en modulenaam kolommen kunt u items alfabetisch sorteren in oplopende of aflopende volgorde. Voor Toewijzingen, Bytes en Gemiddelde Grootte (Bytes), kunt u items sorteren op oplopende of aflopende numerieke waarde.
Symbolen
De volgende symbolen worden weergegeven in de tabbladen Toewijzing, Oproepstructuuren Functies:
- Een waardetype zoals een geheel getal
- Een verzameling van het waardetype, zoals een matrix met gehele getallen
- een verwijzingstype zoals string
- Een verzameling met verwijzingstypen, zoals een matrix met tekenreeksen
Oproepstructuur
In de weergave Oproepstructuur worden de functie-uitvoeringspaden weergegeven die objecten bevatten met een hoog geheugengebruik.
De volgende informatie wordt weergegeven in de weergave Oproepstructuur:
- De kolom functienaam toont het proces of de naam van de functie met objecten die geheugen toewijzen. De weergave is gebaseerd op het niveau van het knooppunt dat u inspecteert.
- De kolommen Totaal (toewijzingen) en Totale grootte (bytes) geven het aantal toegewezen objecten en de hoeveelheid geheugen weer die wordt gebruikt door een functie en alle andere functies die worden aangeroepen. De kolom Totale grootte (bytes) is standaard verborgen.
- De kolommen zelf (toewijzingen) en Self-Size (bytes) geven het aantal toegewezen objecten en de hoeveelheid geheugen weer die wordt gebruikt door één geselecteerde functie of toewijzingstype.
- In de kolom Gemiddelde grootte (bytes) worden dezelfde gegevens weergegeven als in de weergave Toewijzingen. Deze kolom is standaard verborgen.
- In de kolom modulenaam wordt de module weergegeven die de functie of het aanroepende proces bevat.
Aanvullende opties die in de weergave Oproepstructuur verschijnen, zijn onder andere:
- De knop Hot Path uitbreiden markeert een functie-uitvoeringspad met veel objecten die geheugen toekennen. Het algoritme begint bij een knooppunt dat u selecteert en markeert het pad met de meeste toewijzingen, om u te begeleiden in uw onderzoek.
- De knop Hetere pad weergeven toont of verbergt de vlamsymbolen die aangeven welke knooppunten deel uitmaken van het hetere pad.
Functies
In de weergave Functions worden processen, modules en functies weergegeven die geheugen toewijzen.
Informatie die wordt weergegeven in de weergave Functions bevat:
In de kolom Naam worden processen weergegeven als de knooppunten op het hoogste niveau. Onder processen bevinden zich modules en onder modules zijn functies.
In de volgende kolommen worden dezelfde gegevens weergegeven als in de Toewijzing en oproepstructuur weergaven.
- totaal (toewijzingen)
- zelf (toewijzingen)
- totale grootte (bytes)
- Eigen grootte (Bytes)
- gemiddelde grootte (bytes)
Collectie
In de weergave Verzameling ziet u hoeveel objecten zijn verzameld of bewaard tijdens de garbagecollection.
De volgende informatie wordt weergegeven in de weergave Verzameling.
- De kolom GC toont de id van deze garbagecollection in de levenscyclus van het uitvoerbare bestand.
- In de kolom Generation wordt de generatie van de garbage collection weergegeven.
- In de kolom GC-type wordt het type garbage collection weergegeven.
- In de kolom GC Reason ziet u de reden voor dit vuilophaaldienstevenement.
- De kolom Pauzeduur toont de tijd dat de uitvoering werd geblokkeerd omdat de garbagecollector exclusief gebruik van de heap kan maken. Voor achtergrondgeheugenopruiming is deze waarde klein.
- In de kolom LOH-grootte wordt de grootte van de Grote Object Heap weergegeven nadat de garbagecollector is uitgevoerd.
- In de kolom POH-grootte wordt de grootte van de Pinned Object Heap weergegeven nadat de garbage collector is uitgevoerd.
- De kolom Finalizable Surv (MB) toont het aantal MB van objecten met finalizers (destructors) die de garbage collection hebben overleefd.
- In de kolom Vastgemaakte objecten wordt het aantal vastgemaakte objecten weergegeven dat door deze garbagecollection wordt gepromoveerd.
- In de kolom Verzamelde wordt het aantal objecten weergegeven dat door de garbagecollector is verzameld.
- In de kolom Survived ziet u het aantal objecten dat heeft overleefd nadat de garbagecollector is uitgevoerd.
Wanneer u een rij selecteert, worden in deze weergave ook cirkeldiagrammen weergegeven om verzamelde en overlevende objecten per type te visualiseren.
Hulpprogramma's voor filteren
De weergaven Toewijzingen, Oproepstructuuren Functies bevatten allemaal de opties "Just My Code" weergeven en Systeemeigen code weergeven en een filtervak.
- Just My Code weergeven systemen, frameworks en andere niet-gebruikerscode samenvouwen in [Externe code] frames, zodat u zich alleen kunt richten op uw code. Zie Foutopsporing van gebruikerscode met Just My Codevoor meer informatie.
- Systeemeigen code weergeven systeemeigen code in het analysedoel weergeeft en niet-gebruikte code kan bevatten.
- Met het filtervak kunt u de kolom Naam of functienaam filteren op basis van de waarde die u opgeeft. Voer een tekenreekswaarde in het vak in. In de tabel worden vervolgens alleen typen weergegeven die die tekenreeks bevatten.