Dela via


Analysera prestanda med hjälp av CPU-profilering i Prestandaprofiler (C#, Visual Basic, C++, F#)

Ett bra sätt att börja undersöka prestandaproblem i din app är att förstå processoranvändningen med hjälp av en CPU-profilerare. Visual Studios processoranvändning prestandaverktyget visar den aktiva processorberäkningstiden och procentandelen som används för att köra kod i C++, C#/Visual Basic.

Verktyget för CPU-användning kan hjälpa dig:

  • Diagnostisera en nedgång eller när en process hänger sig i teamets kodbas. Verktyget kan hjälpa dig att diagnostisera problemet med teamets produktionskod. Den ger automatiska insikter och olika vyer av dina data så att du kan analysera och diagnostisera prestandaproblem.

  • Identifiera prestandaproblem i DevOps-scenarier Verktyget kan till exempel hjälpa till när en kund rapporterar att vissa begäranden eller beställningar inte når återförsäljarwebbplatsen under högsäsong. Ofta är problemen i produktion och det är svårt att felsöka just nu, men det här verktyget kan hjälpa dig att samla in tillräckligt med information och bevis för problemet. När du har samlat in en spårningsfil kan analysen snabbt hjälpa dig att förstå potentiella orsaker och ge förslag i kodens kontext så att du kan vidta nästa steg för att åtgärda problemet.

  • Kontrollera om processoranvändningen är hög Om ditt svarstidsproblem inte ingår i en API-begäran kan du söka efter hög CPU-användning och andra relaterade problem med verktyget CPU-användning. Verktyget CPU-användning kan hjälpa dig att identifiera flaskhalsar så att du kan begränsa var du ska optimera.

Verktyget CPU Usage är användbart för både lokala spårningssessioner och produktion. Du kan köra verktyget CPU-användning med hjälp av kortkommandot, Alt+F2och sedan välja CPU-användningeller genom att öppna en redan insamlad spårning med hjälp av ett verktyg som dotnet-trace eller dotnet-monitor. (För .NET-produktionskod är det troligtvis så här du samlar in spårningar.)

Du kan köra verktyget CPU-användning i ett öppet Visual Studio-projekt, på en installerad Microsoft Store-app eller ansluten till en app eller process som körs. Du kan köra verktyget CPU-användning vid versions- eller felsökningsversioner. För mer information, se Kör profileringsverktyg vid körning av release- eller debugversioner.

Följande instruktioner visar hur du använder verktyget CPU-användning utan felsökningsprogrammet med hjälp av Visual Studio Performance Profiler. Exemplen använder en release-build på en lokal dator. Release-versioner ger den bästa vyn av den faktiska appens prestanda. En självstudiekurs som visar hur du förbättrar prestandan med hjälp av verktyget CPU-användning finns i Fallstudie: Nybörjarguide för att optimera kod.

Vanligtvis replikerar den lokala datorn bäst installerad appkörning. Om du vill samla in data från en fjärrenhet kör du appen direkt på enheten, inte via en anslutning till fjärrskrivbord.

Samla in processoranvändningsdata

  1. I Visual Studio-projektet anger du lösningskonfigurationen till Release och väljer Local Windows Debugger (eller Local Machine) som distributionsmål.

    Skärmbild som visar Välj version och lokal dator.

    Skärmbild som visar Välj version och lokal dator.

  2. Välj Felsöka>Performance Profiler.

  3. Under Tillgängliga verktygväljer du CPU-användningoch väljer sedan Starta.

    Skärmbild som visar Välj CPU-användning.

    Skärmbild som visar Välj CPU-användning.

    Om du aktiverar alternativet Börja med pausad insamling innan profileraren startas, samlas inte data in förrän du väljer knappen Spela in i vy för diagnostiksession.

    Notera

    Mer information om hur du gör verktyget mer effektivt finns i Optimera profileringsinställningar.

  4. När appen har startats börjar diagnostiksessionen och visar processoranvändningsdata. När du är klar med att samla in data väljer du Stoppa insamling.

    Skärmbild som visar Stoppa insamling av CPU-användningsdata.

    Skärmbild som visar Stoppa insamling av CPU-användningsdata.

    Verktyget CPU-användning analyserar data och visar rapporten. Om du har problem med att samla in eller visa data kan du läsa Felsöka profileringsfel och åtgärda problem.

    Skärmbild som visar cpu-användningsrapport.

    Skärmbild som visar cpu-användningsrapport.

    Använd listrutan Filter för att välja eller avmarkera trådar som ska visas och använd rutan Sök för att söka efter en specifik tråd eller nod.

Datakolumner för CPU-användning

Namn Beskrivning
Total CPU [enhet, %] Total % dataekvation

Millisekunderna för CPU-beräkningstiden och cpu-procentandelen som används av anrop till funktionen och funktioner som anropas av funktionen i det valda tidsintervallet. Detta skiljer sig från diagrammet CPU-användning tidslinje, som jämför den totala CPU-aktiviteten i ett tidsintervall med den totala tillgängliga processorn.
Självprocessor [enhet, %] Själv % ekvation

Millisekunderna för CPU-beräkningstiden och cpu-procentandelen som används av anrop till funktionen i det valda tidsintervallet, exklusive funktioner som anropas av funktionen.
Modul I vissa vyer visas kolumnen Modul, som visar namnet på modulen som innehåller funktionen.

Analysera CPU-insikter

Om några insikter visas i avsnittet Top Insights använder du den angivna länken för att få mer information om det identifierade problemet. Dessutom, om du använder Copilot, kommer knappen Fråga Copilot att öppna Copilot-chattfönstret, och Copilot kommer att ge förslag baserat på din kod samt identifierade problem.

Mer information finns i CPU-insikter.

Analysera CPU-användning

Om du vill analysera cpu-användningsrapporten klickar du på Öppna informationeller klickar på någon av de viktigaste funktionerna för att öppna vyn Functions.

Rapporten innehåller olika vyer av diagnostikdata:

  • Samtalsinitierare/mottagare
  • Samtalsträd
  • Modules
  • Funktioner
  • Flamdiagram

Om du vill analysera rapporten klickar du på Skapa detaljerad rapport.

Rapporten innehåller olika vyer av diagnostikdata:

  • Uppringare/mottagare
  • Samtalsträd

I alla vyer utom anropare/ankallad sorteras diagnostikrapporten efter total CPU, i fallande ordning. Ändra sorteringsordningen eller sorteringskolumnen genom att välja kolumnrubrikerna. Du kan dubbelklicka på en funktion som du är intresserad av, och du ser källan för funktionen samt markeringar som visar var tiden spenderas i den funktionen. Tabellen visar kolumner med data, till exempel den tid som spenderas i funktionen, inklusive kallade funktioner (total CPU) och en andra kolumn som visar den tid som spenderas i en funktion, exklusive kallade funktioner (själv CPU).

Dessa data kan hjälpa dig att bedöma om själva funktionen är en flaskhals för prestanda. Avgör hur mycket data metoden visar för att se om kod från tredje part eller körningsbibliotek är orsaken till att slutpunkterna är långsamma eller resursförbrukningsintensiva.

Mer information om hur du använder Flame-grafen finns i Identifiera heta sökvägar med Flame Graph.

Anropsträd för CPU-användning

Om du vill visa anropsträdet väljer du den överordnade noden i rapporten. Som standard öppnas sidan CPU-användning i --vyn. I listrutan Aktuell vy väljer du Samtalsträd.

Du kan klicka på knapparna Expandera frekvent sökväg och Visa snabbsökväg för att se funktionsanropen som använder den högsta procentandelen av processorn i anropsträdsvyn.

Anropsträdstruktur

Skärmbild som visar samtalssträdstruktur.

Skärmbild som visar en anropsträdstruktur.

Bild Beskrivning
steg 1 Noden på den översta nivån i anropsträdet för CPU-användning, som representerar programmet.
steg 2 När alternativet Visa extern kod inaktiveras i de flesta appar är noden på andra nivån en [extern kod] nod. Noden 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 Andranivånodens underliggande noder är användarkodens metoder och asynkrona rutiner som anropas eller skapas av system- och ramverkskoden på andra nivån.
steg 4 Underordnade noder i en metod har endast data för anrop av den överordnade metoden. När Visa extern kod är inaktiverad kan appmetoder också innehålla en [extern kod] nod.

Extern kod

System- och ramverksfunktioner som körs av din kod kallas extern kod. Externa kodfunktioner 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å anropsträdet för CPU-användning samlar in externa funktioner för en användarmetod i en [externt anrop] nod.

För att visa samtalssökvägarna för extern kod avmarkerar du Visa Just My Code i listrutan Inställningar och väljer sedan Använd. (Listrutan Inställningar finns på huvudsidan för rapportsammanfattning, inte på de detaljerade vyerna.)

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

System- och ramverksfunktioner som körs av din kod kallas extern kod. Externa kodfunktioner 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å anropsträdet för CPU-användning samlar in externa funktioner för en användarmetod i en [extern kod] nod.

Om du vill visa anropssökvägarna för extern kod väljer du Visa extern kod från listrutan Filter och väljer sedan Använd. Vyn för anropsträd på sidan CPU-användning expanderar sedan de externa kodanropen. (Listrutan Filter finns på huvuddiagnostiksidan, inte på de detaljerade vyerna.)

Skärmbild som visar Visa extern kod.

När du inaktiverar Visa just min kodexpanderar anropsträdet vyn på sidan CPU-användning de externa kodanropen.

Många externa kodanropskedjor är djupt kapslade, så kedjans bredd kan överskrida visningsbredden för kolumnen funktionsnamn. Funktionsnamnen visas sedan enligt följande bild.

Skärmbild som visar kapslad extern kod i anropsträdet.

Många externa kodanropskedjor är djupt kapslade, så kedjans bredd kan överskrida visningsbredden för kolumnen funktionsnamn. Funktionsnamnen visas sedan som ....

Skärmbild som visar kapslad extern kod i anropsträdet.

Om du vill hitta ett funktionsnamn som du letar efter använder du sökrutan. Hovra över den markerade linjen eller använd den vågräta rullningslisten för att visa data.

Skärmbild som visar Sök efter kapslad extern kod.

Skärmbild som visar Sök efter kapslad extern kod.

Asynkrona funktioner i anropsträdet för CPU-användning

När kompilatorn stöter på en asynkron metod skapar den en dold klass för att styra metodens körning. Konceptuellt är klassen en tillståndsdator. Klassen har kompilatorgenererade funktioner som asynkront anropar de ursprungliga metoderna och de motringningar, schemaläggare och iteratorer som behövs för att köra dem. När en överordnad metod anropar den ursprungliga metoden tar kompilatorn bort metoden från körningskontexten för den överordnade metoden och kör de dolda klassmetoderna i kontexten för system- och ramverkskoden som styr appkörningen. De asynkrona metoderna körs ofta, men inte alltid, på en eller flera olika trådar. Den här koden visas i anropsträdet CPU-användning som underordnade till [extern kod] node direkt under den översta noden i trädet.

I följande exempel är de två första noderna under [extern kod] de kompilatorgenererade metoderna för tillståndsdatorklassen. Den tredje noden är anropet till den ursprungliga metoden.

Skärmbild som visar asynkron nod.

Expandera de genererade metoderna för att visa vad som händer:

Skärmbild som visar expanderad asynkron nod.

Skärmbild som visar expanderad asynkron nod.

  • MainPage::GetMaxNumberAsyncButton_Click hanterar bara en lista över aktivitetsvärdena, beräknar det maximala resultatet och visar utdata.

  • MainPage+<GetMaxNumberAsyncButton_Click>d__3::MoveNext visar den aktivitet som krävs för att schemalägga och starta de 48 uppgifter som inramar anropet till GetNumberAsync.

  • MainPage::<GetNumberAsync>b__b visar aktiviteten för uppgifter som anropar GetNumber.

Samla in antal samtal (.NET)

Om du vill visa antal samtal i vyn Funktioner kan du aktivera inställningen innan du startar profileraren. Den här inställningen stöds för .NET-projekttyper och kräver att processen startas under profileraren. Bifogningsscenariot stöds inte.

  1. Välj ikonen Inställningar för CPU-användning i Prestandaprofiler.

    Skärmbild som visar inställningsikonen för CPU-användning.

  2. Aktivera alternativet Samla in antal samtal (endast.NET).

    Skärmbild som visar inställningar för CPU-användning.

  3. Samla in cpu-användningsdata.

  4. Öppna vyn Funktioner och kontrollera sedan att kolumnen Antal samtal är inställd på synlig.

    Om du inte ser kolumnen högerklickar du på en kolumnrubrik för att välja synliga kolumner.

    Skärmbild som visar data om antal samtal.