Dela via


Mäta programmets prestanda genom att analysera CPU-användning (C#, Visual Basic, C++, F#)

Hitta prestandaproblem när du felsöker med det felsökningsintegrerade CPU-användningsdiagnostikverktyget. Du kan också analysera CPU-användning utan ett felsökningsprogram kopplat eller genom att rikta in dig på en app som körs. Mer information finns i Kör profileringsverktyg vid versions- eller felsökningsversioner och Analysera prestanda med hjälp av CPU-profilering.

När felsökningsprogrammet pausar samlar verktyget CPU Usage i fönstret Diagnostikverktyg in information om de funktioner som körs i programmet. Verktyget visar de funktioner som utförde arbetet och innehåller en tidslinjediagram som du kan använda för att fokusera på specifika segment i samplingssessionen.

Viktig

De felsökningsintegrerade diagnostikverktygen stöds för .NET-utveckling i Visual Studio, inklusive ASP.NET, ASP.NET Core och för intern/C++-utveckling. Motsvarande Visual Studio-arbetsbelastning krävs. Windows 8 och senare krävs för att köra profileringsverktyg i felsökningsprogrammet (diagnostikverktygsfönstret).

I den här guiden kommer du att:

  • Samla in processoranvändningsdata
  • Analysera processoranvändningsdata

Steg 1: Samla in processoranvändningsdata

  1. Öppna det projekt som du vill felsöka i Visual Studio och ange en brytpunkt i appen vid den punkt där du vill undersöka CPU-användningen.

  2. Ange en andra brytpunkt i slutet av den funktion eller region med kod som du vill analysera.

    Genom att ange två brytpunkter kan du begränsa datainsamlingen till de delar av koden som du vill analysera.

  3. Fönstret Diagnostikverktyg visas automatiskt om du inte har inaktiverat det. Om du vill öppna fönstret igen klickar du på Felsöka>Windows>Visa diagnostikverktyg.

  4. Du kan välja om du vill se CPU-användning, minnesanvändningeller båda, med inställningen Välj verktyg i verktygsfältet. Om du kör Visual Studio Enterprise kan du också aktivera eller inaktivera IntelliTrace i Tools>Options>IntelliTrace.

    Skärmbild som visar diagnostikverktyg.

    Skärmbild som visar diagnostikverktyg.

    Vi kommer främst att titta på CPU-användning, så se till att CPU-användning är aktiverad (den är aktiverad som standard).

  5. Klicka på Felsök>Starta felsökning (eller Starta i verktygsfältet eller F5).

    När appen har lästs in visas sammanfattningsvyn för diagnostikverktygen. Om du behöver öppna fönstret klickar du på Felsöka>Windows>Visa diagnostikverktyg.

    Skärmbild som visar fliken Sammanfattning av diagnostikverktyg.

    Skärmbild som visar fliken Sammanfattning av diagnostikverktyg.

    Mer information om händelserna finns i Söka efter och filtrera fliken Händelser i fönstret Diagnostikverktyg.

  6. Kör scenariot som gör att din första brytpunkt träder i kraft.

  7. När felsökningsprogrammet har pausats aktiverar du insamlingen av CPU-användningsdata och öppnar sedan fliken CPU-användning.

    Skärmbild som visar diagnostikverktyg som aktiverar CPU-profilering.

    Skärmbild som visar diagnostikverktyg som aktiverar CPU-profilering.

    När du väljer Registrera CPU-profilbörjar Visual Studio spela in dina funktioner och hur lång tid det tar att köra dem. Du kan bara visa dessa insamlade data när programmet stoppas vid en brytpunkt.

  8. Tryck på F5 för att köra appen till din andra brytpunkt.

    Nu har du prestandadata för ditt program specifikt för den kodregion som körs mellan de två brytpunkterna.

    Profileraren börjar förbereda tråddata. Vänta tills den är klar.

    Skärmbild som visar diagnostikverktyg som förbereder trådar.

    Skärmbild som visar diagnostikverktyg som förbereder trådar.

    Verktyget CPU-användning visar rapporten på fliken CPU-användning.

    Skärmbild som visar fliken Cpu-användning för diagnostikverktyg.

    Skärmbild som visar fliken Cpu-användning för diagnostikverktyg.

  9. Om du vill välja en mer specifik kodregion att analysera väljer du en region i CPU-tidslinjen (det måste vara en region som visar profileringsdata).

    Skärmbild som visar diagnostikverktyg som väljer ett tidssegment.

    Skärmbild som visar diagnostikverktyg som väljer ett tidssegment.

    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.

    Tips

    När du försöker identifiera prestandaproblem bör du utföra flera mätningar. Prestanda varierar naturligt från körning till körning, och kodsökvägar körs vanligtvis långsammare första gången de körs på grund av engångsinitieringsarbete, till exempel inläsning av DLL:er, JIT-kompileringsmetoder och initiering av cacheminnen. Genom att göra flera mätningar får du en bättre uppfattning om intervallet och medianen för måttet som visas, vilket gör att du kan jämföra första gången jämfört med prestanda för stabilt tillstånd för ett kodområde.

Steg 2: Analysera processoranvändningsdata

Vi rekommenderar att du börjar analysera dina data genom att undersöka listan över funktioner under CPU-användning, identifiera de funktioner som utför mest arbete och sedan ta en närmare titt på var och en.

  1. I funktionslistan undersöker du de funktioner som utför mest arbete.

    Skärmbild som visar listan över processoranvändningsfunktioner för diagnostikverktyg.

    Skärmbild som visar listan över processoranvändningsfunktioner för diagnostikverktyg.

    Tips

    Funktioner visas i ordning med de som utför mest arbete (de är inte i anropsordning). Detta hjälper dig att snabbt identifiera de funktioner som körs längst.

  2. Dubbelklicka på en av dina appfunktioner som utför mycket arbete i funktionslistan.

    När du dubbelklickar på en funktion öppnas vyn Functions i det vänstra fönstret. Välj Uppringare/samtalsmottagare vy från rullgardinsmenyn.

    Skärmbild som visar vyn Samtalsmottagare för diagnostikverktyg.

    I den här vyn visas den valda funktionen i rubriken och i rutan Aktuell funktion (DoWork, i det här exemplet). Funktionen som anropade den aktuella funktionen visas till vänster under Calling Functions, och alla funktioner som anropas av den aktuella funktionen visas i rutan Anropade funktioner till höger. (Du kan välja någon av rutorna för att ändra den aktuella funktionen.)

    Den här vyn visar den totala tiden (ms) och procentandelen av den totala appkörningstiden som funktionen har tagit att slutföra. Funktionstext visar också den totala tiden (och procentandelen tid) som spenderas i funktionstexten exklusive tid som ägnas åt att anropa och anropa funktioner.

    När du dubbelklickar på en funktion öppnas vyn Anropare/mottagare i det vänstra fönstret.

    Skärmbild som visar Diagnostics Tools Caller Callee View.

    I den här vyn visas den valda funktionen i rubriken och i rutan Aktuell funktion (GetNumber, i det här exemplet). Funktionen som anropade den aktuella funktionen visas till vänster under Calling Functions, och alla funktioner som anropas av den aktuella funktionen visas i rutan Anropade funktioner till höger. (Du kan välja någon av rutorna för att ändra den aktuella funktionen.)

    Den här vyn visar den totala tiden (ms) och procentandelen av den totala appkörningstiden som funktionen har tagit att slutföra. Funktionskropp visar också den totala tiden (och procentandelen tid) som spenderas i funktionskroppen, exklusive tid som ägnas åt anropande och anropade funktioner. (I det här exemplet spenderades 2367 av 2 389 ms i funktionstexten och de återstående 22 ms spenderades i extern kod som anropades av den här funktionen).

    Tips

    Höga värden i Funktionstext kan tyda på en flaskhals för prestanda i själva funktionen.

  3. Om du vill se en vy på högre nivå som visar i vilken ordning funktionerna anropas väljer du Samtalsträd i listrutan överst i fönstret.

    Varje numrerat område i figuren relaterar till ett steg i proceduren.

    Diagnostikverktyg Anropsträd

    Bild Beskrivning
    steg 1 Noden på den översta nivån i anropsträdet för CPU-användning, som representerar programmet.
    Steg 2 I de flesta appar är alternativet Visa extern kod inaktiverats, noden på andra nivån en [extern kod] nod som innehåller system- och ramverkskoden som startar och stoppar appen, ritar användargränssnittet, styr trådschemaläggning och tillhandahåller andra lågnivåtjänster till appen.
    steg 3 Barnen till den andra nivåns nod är användarkodmetoder och asynkrona rutiner som anropas eller skapas av systemkod och ramverkskod på andra nivån.
    Steg 4 Underordnade noder i en metod innehåller endast data relaterade till anrop av den överordnade metoden. När Visa extern kod är inaktiverad kan appmetoder också innehålla en [extern kod] nod.

    Här är mer information om kolumnvärdena:

    • Total CPU- anger hur mycket arbete som utförts av funktionen och alla funktioner som anropas av den. Höga totala CPU-värden pekar på de funktioner som är dyrast totalt sett.

    • Self CPU anger hur mycket arbete som utfördes av koden i funktionstexten, exklusive det arbete som utförts av funktioner som anropades av den. Höga Själv-CPU- värden kan tyda på en flaskhals för prestanda i funktionen själv.

    • Moduler Namnet på modulen som innehåller funktionen eller antalet moduler som innehåller funktionerna i en nod [Extern kod].

    Om du vill se de funktionsanrop som använder den högsta procentandelen av processorn i anropsträdsvyn klickar du på Expandera frekvent sökväg. Den heta sökvägen kan hjälpa dig att fokusera din undersökning på det område som skulle ha störst inverkan.

    Skärmbild som visar snabbsökväg för diagnostikverktyg.

    Not

    Om du ser kod i anropsträdet som markerats som "bruten" kod eller "ogångbar stack" indikerar detta att händelsespårning för Windows-händelser (ETW) sannolikt har tagits bort. Försök att samla in samma spårning en andra gång för att lösa problemet.

  4. Om du vill se en annan vy över data väljer du Flame Graph i listrutan överst i fönstret.

    Flamdiagrammet innehåller en annan visualisering av anropsträdet som kan hjälpa dig att analysera data. Mer information finns i Identifiera heta sökvägar med ett flamdiagram.

Visa extern kod

Extern kod är funktioner i system- och ramverkskomponenter som körs av den kod som du skriver. Extern kod innehåller funktioner som startar och stoppar appen, ritar användargränssnittet, styr trådning och tillhandahåller andra lågnivåtjänster till appen. I de flesta fall är du inte intresserad av extern kod, så verktyget CPU-användning samlar in de externa funktionerna i en användarmetod i en [externt anrop] nod.

Om du vill visa anropssökvägarna för extern kod avmarkerar du Visa just my code- från listan Inställningar och väljer sedan Använd.

Skärmbild som visar Inställningar och sedan Visa just min kod.

Extern kod är funktioner i system- och ramverkskomponenter som körs av den kod som du skriver. Extern kod innehåller funktioner som startar och stoppar appen, ritar användargränssnittet, styr trådning och tillhandahåller andra lågnivåtjänster till appen. I de flesta fall är du inte intresserad av extern kod, så verktyget CPU-användning samlar in de externa funktionerna i en användarmetod i en [extern kod] nod.

Om du vill visa sökvägarna för extern kod väljer du Visa extern kod i filtervyn och väljer sedan Använd.

Skärmbild som visar Välj filtervy och sedan Visa extern kod.

Tänk på att många externa kodanropskedjor är djupt kapslade, så att bredden på kolumnen för funktionsnamn kan överskrida visningsbredden på nästan alla datorskärmar. När detta händer visas funktionsnamn som [...].

Använd sökrutan för att hitta en nod som du letar efter och använd sedan den vågräta rullningslisten för att visa data.

Tips

Om du profilerar extern kod som anropar Windows-funktioner bör du se till att du har den senaste .pdb-filer. Utan dessa filer visar rapportvyerna Windows-funktionsnamn som är kryptiska och svåra att förstå. För mer information om hur du säkerställer att du har de filer du behöver, se Ange symbol (.pdb) och källfiler i felsökningsprogrammet.

Nästa steg

I den här självstudien har du lärt dig hur du samlar in och analyserar cpu-användningsdata. Om du redan har slutfört rundturen i profilerarenkanske du vill gå igenom en handledning som visar hur du använder verktygen mer effektivt.

I den här självstudien har du lärt dig hur du samlar in och analyserar cpu-användningsdata vid felsökning. Du kanske vill veta mer om att profilera versionsversioner med hjälp av Prestandaprofiler.