Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Hitta minnesläckor och ineffektivt minne när du felsöker med det felsökningsintegrerade minnesanvändning diagnostikverktyget. Med verktyget Minnesanvändning kan du ta en eller flera ögonblicksbilder av den hanterade och interna minneshögen för att förstå minnesanvändningens inverkan på objekttyper. Du kan också analysera minnesanvändningen utan ett felsökningsprogram kopplat eller genom att rikta in dig på en app som körs. Mer information finns i Använd profileringsverktyg på release- eller debuggarbyggen. Information om hur du väljer det bästa minnesanalysverktyget för dina behov finns i Välj ett verktyg för minnesanalys.
Även om du kan samla in minnesögonblicksbilder när som helst i verktyget Memory Usage kan du använda Visual Studio felsökningsprogrammet för att styra hur programmet körs när du undersöker prestandaproblem. Genom att ställa in brytpunkter, stega genom, Bryt allt och andra felsökningsåtgärder kan du fokusera på de mest relevanta kodvägarna i dina prestandaundersökningar. Om du utför dessa åtgärder medan appen körs kan du eliminera bruset från koden som inte intresserar dig och avsevärt minska den tid det tar att diagnostisera ett problem.
Tips
Du kan också använda GitHub Copilot Profiler Agent för att få AI-driven vägledning för att samla in och analysera minnesspårningar.
Viktig
De felsökningsintegrerade diagnostikverktygen stöds för .NET utveckling i Visual Studio, inklusive ASP.NET, ASP.NET Core, intern/C++-utveckling och appar i blandat läge (.NET och internt).
I den här handledningen kommer du att:
- Ta ögonblicksbilder av minnet
- Analysera minnesanvändningsdata
Om minnesanvändning inte ger dig de data som du behöver, tillhandahåller andra profileringsverktyg i Performance Profiler olika typer av information som kan vara till hjälp för dig. I många fall kan prestandaflaskhalsen i ditt program orsakas av något annat än ditt minne, till exempel CPU, återgivningsgränssnitt eller tid för nätverksbegäran.
Not
Support för anpassad minnesallokering Den inbyggda minnesprofileraren fungerar genom att samla in ETW- händelsedata som genereras under körning. Allokerare i CRT och Windows SDK har kommenterats på källnivå så att deras allokeringsdata kan samlas in. Om du skriver egna allokerare kan vilka funktioner som helst som returnerar en pekare till nyligen allokerat heap-minne dekoreras med __declspec(allokerare), som du ser i det här exemplet för myMalloc:
__declspec(allocator) void* myMalloc(size_t size)
Samla in minnesanvändningsdata
Öppna den project du vill felsöka i Visual Studio och ange en brytpunkt i appen vid den punkt där du vill börja undersöka minnesanvändningen.
Om du har ett område där du misstänker ett minnesproblem anger du den första brytpunkten innan minnesproblemet uppstår.
Tips
Eftersom det kan vara svårt att avbilda minnesprofilen för en åtgärd som intresserar dig när din app ofta allokerar och avallokerar minne, anger du brytpunkter i början och slutet av åtgärden (eller går igenom åtgärden) för att hitta exakt den punkt då minnet ändrades.
Ange en andra brytpunkt i slutet av den funktion eller region med kod som du vill analysera (eller efter att ett misstänkt minnesproblem inträffar).
Fönstret Diagnostikverktyg visas automatiskt om du inte har inaktiverat det. Om du vill öppna fönstret igen klickar du på FelsökaWindowsVisa diagnostikverktyg.
Välj minnesanvändning med inställningen Välj verktyg i verktygsfältet.
Skärmbild av fönstret Diagnostikverktyg med verktyget Minnesanvändning valt i listrutan Välj verktyg.
Skärmbild av fönstret Diagnostikverktyg med verktyget Minnesanvändning valt i listrutan Välj verktyg.
Klicka på Felsöka/Starta felsökning (eller Starta i verktygsfältet eller F5).
När appen har laddats klart visas diagnostikverktygens sammanfattningsvy.
Skärmbild av fliken Sammanfattning för diagnosverktyg som visar tidslinjediagrammet för minnesanvändning och diagram över processminne.
Not
Eftersom insamling av minnesdata kan påverka felsökningsprestandan för dina interna appar eller appar i blandat läge inaktiveras minnesögonblicksbilder som standard. Om du vill aktivera ögonblicksbilder i interna appar eller appar i blandat läge startar du en felsökningssession (genvägsnyckel: F5). När fönstret Diagnostikverktyg visas, väljer du fliken Minnesanvändning och därefter Heap-profilering.
Skärmbild av verktygsfältet Minnesanvändning med knappen Heap-profilering markerad för att aktivera ögonblicksbilder för interna appar eller appar i blandat läge.
Stoppa (genvägsnyckel: SkiftF5) och starta om felsökning.
Skärmbild av fliken Sammanfattning för diagnosverktyg som visar tidslinjediagrammet för minnesanvändning och diagram över processminne.
Not
Eftersom insamling av minnesdata kan påverka felsökningsprestandan för dina interna appar eller appar i blandat läge inaktiveras minnesögonblicksbilder som standard. Om du vill aktivera ögonblicksbilder i interna appar eller appar i blandat läge startar du en felsökningssession (genvägsnyckel: F5). När fönstret Diagnostikverktyg visas, väljer du fliken Minnesanvändning och därefter Heap-profilering.
Skärmbild av verktygsfältet Minnesanvändning med knappen Heap-profilering markerad för att aktivera ögonblicksbilder för interna appar eller appar i blandat läge.
Stoppa (genvägsnyckel: SkiftF5) och starta om felsökning.
Om du vill ta en ögonblicksbild i början av felsökningssessionen väljer du Ta ögonblicksbild i verktygsfältet Minnesanvändning sammanfattning. (Det kan också hjälpa dig att ange en brytpunkt här.)
Skärmbild av verktygsfältet För sammanfattning av minnesanvändning med knappen Ta ögonblicksbild.
Tips
Om du vill skapa en baslinje för minnesjämförelser bör du överväga att ta en ögonblicksbild i början av felsökningssessionen.
Kör scenariot som gör att din första brytpunkt aktiveras.
När felsökningsprogrammet pausas vid den första brytpunkten väljer du Ta ögonblicksbild i verktygsfältet Minnesanvändning sammanfattning.
Tryck på F5 för att köra appen till din andra brytpunkt.
Ta nu en ny ögonblicksbild.
Nu kan du börja analysera data.
Om du har problem med att samla in eller visa data kan du läsa Felsöka profileringsfel och åtgärda problem.
Analysera minnesanvändningsdata
Raderna i tabellen Minnesanvändningssammanfattning visar de ögonblicksbilder som du har tagit under felsökningssessionen och innehåller länkar till mer detaljerade vyer.
Skärmbild av sammanfattningstabellen för minnesanvändning som visar två ögonblicksbilder med kolumner för Objekt, Heap-storlek och deras skillnader.
Namnet på kolumnen beror på vilket felsökningsläge du väljer i egenskaperna project: .NET, intern eller blandad (både .NET och intern).
Kolumnen Objects (Diff) (.NET) eller Allocations (Diff) (C++) visar antalet objekt i .NET eller internt minne när ögonblicksbilden togs.
Kolumnen Heap Size (Diff) visar antalet byte i .NET och interna heaps
När du har tagit flera ögonblicksbilder innehåller cellerna i sammanfattningstabellen ändringen i värdet mellan radögonblicksbilden och den tidigare ögonblicksbilden.
Om du vill analysera minnesanvändningen klickar du på en av länkarna som öppnar en detaljerad rapport om minnesanvändning:
- Om du vill visa information om skillnaden mellan den aktuella ögonblicksbilden och den föregående ögonblicksbilden väljer du ändringslänken till vänster om pilen (Minnesanvändningsökningminnesanvändningsökning). En röd pil anger en ökning av minnesanvändningen och en grön pil anger en minskning.
Tips
För att hjälpa dig att identifiera minnesproblem snabbare sorteras diffrapporterna efter objekttyper som ökade mest i det totala antalet (klicka på ändringslänken i Objekt (Diff) kolumn) eller som ökade mest i total heapstorlek (klicka på ändringslänken i Heap Size (Diff) kolumn).
Om du bara vill visa information om den valda ögonblicksbilden klickar du på länken icke-ändra.
Rapporten visas i ett separat fönster.
Rapporter för hanterade typer
Välj den nuvarande länken för en objekt (Diff) cell i sammanfattningstabellen för minnesanvändning.
Skärmbild av hanterad typrapport.Hanterad typrapport
Not
För .NET-koden är ikonen View Details (
) endast tillgänglig när du använder det debugger-integrerade minnesanvändningsverktyget eller när du öppnar en heap-snapshot och väljer Felsöka hanterat minne.
Det övre fönstret visar antalet och storleken på typerna i ögonblicksbilden, inklusive storleken på alla objekt som refereras till av typen (Inkluderande storlek).
I trädet Sökvägar till rot i det nedre fönstret visas de objekt som refererar till den typ som valts i det övre fönstret. Den .NET skräpinsamlaren rensar bara minnet för ett objekt när den sista typen som refererar till det har släppts. Mer information om hur du använder sökvägar till rotträdet finns i Analysera frekvent sökväg till rot.
Skärmbild av hanterad typrapport.Hanterad typrapport
Not
För .NET kod, ikonen View Instances (
) är endast tillgängligt när du använder det debugger-integrerade minnesanvändningsverktyget eller när du öppnar en heap-ögonblicksbild och väljer Felsöka hanterat minne.
Det övre fönstret visar antalet och storleken på typerna i ögonblicksbilden, inklusive storleken på alla objekt som refereras till av typen (Inkluderande storlek).
I trädet Sökvägar till rot i det nedre fönstret visas de objekt som refererar till den typ som valts i det övre fönstret. Den .NET skräpinsamlaren rensar bara minnet för ett objekt när den sista typen som refererar till det har släppts. Mer information om hur du använder sökvägar till rotträdet finns i Analysera frekvent sökväg till rot.
Trädet Refererade typer visar de referenser som innehas av den typ som valts i det övre fönstret.
Skärmbild av rapporten Refererade objekt.
Trädet Refererade typer visar de referenser som innehas av den typ som valts i det övre fönstret.
Skärmbild av rapporten Refererade objekt.
Om du vill visa instanserna av en vald typ i det övre fönstret klickar du på ikonen Visa information bredvid objekttypen.
Skärmbild av vyn Instanser i verktyget Minnesanvändning.Instansvyn i verktyget Minnesanvändning
Vyn Instanser visar instanserna av det markerade objektet i ögonblicksbilden i det övre fönstret. Fönstret Sökvägar till rot- och refererade objekt visar de objekt som refererar till den valda instansen och de typer som den valda instansen refererar till. När felsökningsprogrammet stoppas vid den tidpunkt då ögonblicksbilden togs kan du hovra över cellen Value för att visa objektets värden i ett verktygstips.
Om du vill visa instanserna av en vald typ i det övre fönstret klickar du på ikonen Visa instanser bredvid objekttypen.
Skärmbild av vyn Instanser i verktyget Minnesanvändning.Instansvyn i verktyget Minnesanvändning
Vyn Instanser visar instanserna av det markerade objektet i ögonblicksbilden i det övre fönstret. Fönstret Sökvägar till rot- och refererade objekt visar de objekt som refererar till den valda instansen och de typer som den valda instansen refererar till. När felsökningsprogrammet stoppas vid den tidpunkt då ögonblicksbilden togs kan du hovra över cellen Value för att visa objektets värden i ett verktygstips.
Rapporter för inbyggda typer
Välj den aktuella länken för en allokering (Diff) eller en heap-storlek (Diff) cell i tabellen för sammanfattning av minnesanvändning i fönstret Diagnostikverktyg.
Skärmbild av inbyggd typvy.
Skärmbild av inbyggd typvy.
Typvyn visar antalet och storleken på typerna i ögonblicksbilden.
Välj ikonen Visa information bredvid en vald typ för att visa information om objekt av den valda typen i ögonblicksbilden.
Vyn instanser visar varje instans av den valda typen. Om du väljer en instans visas anropsstacken som resulterade i att instansen skapades i fönstret Allokeringsanropsstacken. (Den här informationen är endast tillgänglig vid felsökning.)
Skärmbild av instansvyn och Allokeringssamtalsstack-fönstret.
Välj ikonen Visa instanser bredvid en vald typ för att visa information om objekt av den valda typen i ögonblicksbilden.
Vyn instanser visar varje instans av den valda typen. Om du väljer en instans visas anropsstacken som resulterade i att instansen skapades i fönstret Allokeringsanropsstacken. (Den här informationen är endast tillgänglig vid felsökning.)
Skärmbild av instansvyn och Allokeringssamtalsstack-fönstret.
Välj Stacks för att se allokeringsstacken för den valda typen.
Skärmbild av stackvyn.
Välj Stacks för att se allokeringsstacken för den valda typen.
Skärmbild av stackvyn.
Insikter om minnesanvändning
För hanterat minne ger verktyget Minnesanalys också flera kraftfulla inbyggda automatiska insikter. Välj fliken Insights i rapporterna för hanterade typer, och den visar tillämpliga automatiska insikter som Duplicerade strängar, Glesa matriseroch Läckor i händelsehanterare.
Skärmbild av insiktsvyn i verktyget Minnesanvändning.insikter om minnesanvändning
Skärmbild av insiktsvyn i verktyget Minnesanvändning.insikter om minnesanvändning
Avsnittet Duplicerade strängar visar en lista över strängar som allokeras flera gånger på heap. Dessutom visar det här avsnittet det totala bortkastade minnet, dvs. (antalet instanser - 1) gånger storleken på strängen.
Avsnittet Sparse Arrays visar matriser som mestadels är fyllda med noll element, vilket kan vara ineffektivt när det gäller prestanda och minnesanvändning. Minnesanalysverktyget identifierar automatiskt dessa matriser och visar hur mycket minne som slösas bort på grund av dessa nollvärden.
Avsnittet Event Handler Leaks, som finns i Visual Studio 2022 version 17.9 Preview 1, visar potentiella minnesläckor som kan inträffa när ett objekt prenumererar på ett annat objekts händelse. Om utgivaren av händelsen överlever prenumeranten, fortsätter prenumeranten att existera, även om det inte finns några andra referenser till den. Detta kan leda till minnesläckor, där oanvänt minne inte frigörs korrekt, vilket gör att programmet använder mer och mer minne över tid.
Vissa typer är kända för att ha fält som kan läsas för att fastställa storleken på det interna minnet som de håller fast vid. Fliken Insights visar falska interna minnesnoder i objektdiagrammet, som behålls av sina överordnade objekt så att användargränssnittet känner igen dem och visar deras storlek och referensdiagram.
Skärmbild av den interna insiktsvyn i verktyget Minnesanvändning.intern insiktsvy i verktyget Minnesanvändning
Ändra rapporter (Diff)
Välj ändringslänken i en cell i sammanfattningstabellen på fliken Minnesanvändning i fönstret Diagnostikverktyg.
Skärmbild av sammanfattningstabellen för minnesanvändning med ändringslänken markerad i en ögonblicksbildcell.
Välj en ögonblicksbild i Jämför med lista över en hanterad eller intern rapport.
Skärmbild av listrutan Jämför med i en rapport om minnesanvändning som visar tillgängliga ögonblicksbilder för jämförelse.
Skärmbild av listrutan Jämför med i en rapport om minnesanvändning som visar tillgängliga ögonblicksbilder för jämförelse.
Ändringsrapporten lägger till kolumner (markerade med (Diff)) i basrapporten som visar skillnaden mellan basögonblicksbildens värde och jämförelseögonblicksbilden. Så här kan en diffrapport för inbyggd typvy se ut:
skärmbild av Diff-vy för inbyggda typer.Diff-vy för inbyggda typer
skärmbild av Diff-vy för inbyggda typer.Diff-vy för inbyggda typer
Det övre fönstret visar antalet och storleken på typerna i ögonblicksbilden, inklusive storleken på alla objekt som refereras till av typen (Inkluderande storlek).
Bloggar och videor
Analysera processor och minne vid felsökning
Visual C++ Blogg: Minnesprofilering i Visual C++ 2015
Nästa steg
I den här självstudien har du lärt dig hur du samlar in och analyserar minnesanvändningsdata vid felsökning. Här följer några föreslagna nästa steg:
- Information om hur du analyserar minnesanvändning i versionsversioner finns i Analysera minnesanvändning i Prestandaprofiler.
- Mer information om hur du optimerar kod med hjälp av profileringsverktygen finns i Fallstudie: Nybörjarguide för att optimera kod.
- Information om ai-driven profilering finns i Profile your app with GitHub Copilot Profiler Agent.
- En översikt över alla profileringsverktyg finns i Första titt på profileringsverktyg.