Delen via


Toepassingsprestaties meten door CPU-gebruik te analyseren (C#, Visual Basic, C++, F#)

Prestatieproblemen opsporen terwijl u aan het debuggen bent, met het in de debugger geïntegreerde diagnostische hulpprogramma voor CPU-gebruik (,). U kunt het CPU-gebruik ook analyseren zonder dat er een foutopsporingsprogramma is gekoppeld of door een actieve app te gebruiken. Zie Hulpprogramma's voor profilering uitvoeren bij release of foutopsporingsversies en Prestaties analyseren met behulp van CPU-profileringvoor meer informatie.

Wanneer het foutopsporingsprogramma wordt onderbroken, verzamelt het hulpprogramma CPU-gebruik in het venster Diagnostische hulpprogramma's informatie over de functies die in uw toepassing worden uitgevoerd. Het hulpprogramma bevat de functies die werk uitvoeren en biedt een tijdlijngrafiek die u kunt gebruiken om u te richten op specifieke segmenten van de samplingsessie.

Belangrijk

De debugger-geïntegreerde diagnostische hulpprogramma's zijn beschikbaar voor .NET-ontwikkeling in Visual Studio, inclusief ASP.NET, ASP.NET Core en voor native/C++-ontwikkeling. De bijbehorende Visual Studio workload is vereist. Windows 8 en hoger is vereist voor het uitvoeren van profileringsprogramma's met het foutopsporingsprogramma (Diagnostische hulpprogramma's venster).

In deze zelfstudie gaat u het volgende doen:

  • Cpu-gebruiksgegevens verzamelen
  • Cpu-gebruiksgegevens analyseren

Stap 1: CPU-gebruiksgegevens verzamelen

  1. Open het project dat u wilt opsporen in Visual Studio en stel een onderbrekingspunt in uw app in op het punt waar u het CPU-gebruik wilt onderzoeken.

  2. Stel een tweede onderbrekingspunt in aan het einde van de functie of het codegebied dat u wilt analyseren.

    Door twee onderbrekingspunten in te stellen, kunt u het verzamelen van gegevens beperken tot de onderdelen van de code die u wilt analyseren.

  3. Het Diagnostische hulpprogramma-venster wordt automatisch weergegeven, tenzij u het hebt uitgeschakeld. Als u het venster opnieuw wilt weergeven, klikt u op Foutopsporing>Windows>Diagnostische hulpprogramma's weergeven.

  4. U kunt kiezen of u CPU-gebruik, geheugengebruik, of beide wilt zien via de instelling Hulpmiddelen selecteren op de werkbalk. Als u Visual Studio Enterprise uitvoert, kunt u IntelliTrace ook in- of uitschakelen in Tools>Options>IntelliTrace.

    Schermopname van diagnostische hulpprogramma's.

    Schermopname van diagnostische hulpprogramma's.

    We kijken voornamelijk naar het CPU-gebruik, dus zorg ervoor dat CPU-gebruik is ingeschakeld (dit is standaard ingeschakeld).

  5. Klik op Debug>Debuggen starten (of Starten op de werkbalk of F5).

    Wanneer het laden van de app is voltooid, wordt de overzichtsweergave van de diagnostische hulpprogramma's weergegeven. Als u het venster wilt openen, klikt u op Foutopsporing>Windows>Diagnostische hulpprogramma's weergeven.

    Schermopname van het tabblad Overzicht diagnostische hulpprogramma's.

    Schermopname van het tabblad Overzicht diagnostische hulpprogramma's.

    Zie Het tabblad Gebeurtenissen van het venster Diagnostische hulpprogramma's zoeken en filterenvoor meer informatie over de gebeurtenissen.

  6. Voer het scenario uit waardoor uw eerste onderbrekingspunt wordt bereikt.

  7. Terwijl het foutopsporingsprogramma is onderbroken, schakelt u het verzamelen van de gegevens van het CPU-gebruik in en opent u vervolgens het tabblad CPU-gebruik.

    Schermopname waarin diagnostische hulpprogramma's CPU-profilering inschakelen.

    Schermopname waarin diagnostische hulpprogramma's CPU-profilering inschakelen.

    Wanneer u CPU-profielopnemen kiest, begint Visual Studio met het opnemen van uw functies en hoeveel tijd nodig is om uit te voeren. U kunt deze verzamelde gegevens alleen bekijken wanneer uw toepassing wordt gestopt op een onderbrekingspunt.

  8. Druk op F5 om de app uit te voeren naar uw tweede onderbrekingspunt.

    U hebt nu prestatiegegevens voor uw toepassing, specifiek voor de regio met code die tussen de twee onderbrekingspunten wordt uitgevoerd.

    De profiler begint met het voorbereiden van threadgegevens. Wacht totdat het is voltooid.

    Schermopname met diagnostische hulpprogramma's voor het voorbereiden van threads.

    Schermopname met diagnostische hulpprogramma's voor het voorbereiden van threads.

    Het hulpprogramma CPU-gebruik geeft het rapport weer op het tabblad CPU-gebruik.

    Schermopname van het tabblad CPU-gebruik van diagnostische hulpprogramma's.

    Schermopname van het tabblad CPU-gebruik van diagnostische hulpprogramma's.

  9. Als u een specifiekere regio met code wilt selecteren die u wilt analyseren, selecteert u een regio in de CPU-tijdlijn (dit moet een regio zijn waarin profileringsgegevens worden weergegeven).

    Schermopname van diagnostische hulpprogramma's waarin een tijdsegment wordt geselecteerd.

    Schermopname van diagnostische hulpprogramma's waarin een tijdsegment wordt geselecteerd.

    Op dit moment kunt u beginnen met het analyseren van de gegevens. Zie Profileringsfouten oplossen en problemen oplossenals u problemen ondervindt bij het verzamelen of weergeven van gegevens.

    Tip

    Wanneer u prestatieproblemen probeert te identificeren, moet u meerdere metingen uitvoeren. De prestaties variëren van run-to-run en codepaden worden doorgaans langzamer uitgevoerd wanneer ze voor het eerst worden uitgevoerd vanwege eenmalige initialisatie, zoals het laden van DLL's, JIT-compilatiemethoden en het initialiseren van caches. Door meerdere metingen te nemen, krijgt u een beter beeld van het bereik en de mediaan van de weergegeven metrische gegevens, zodat u de eerste keer kunt vergelijken met de stabiele statusprestaties van een codegebied.

Stap 2: CPU-gebruiksgegevens analyseren

We raden u aan om te beginnen met het analyseren van uw gegevens door de lijst met functies onder CPU-gebruik te bekijken, de functies te identificeren die het meeste werk doen en vervolgens elke functie nader te bekijken.

  1. Bekijk in de lijst met functies de functies die het meeste werk doen.

    schermopname van de lijst met functies voor CPU-gebruik van diagnostische hulpprogramma's.

    schermopname van de lijst met functies voor CPU-gebruik van diagnostische hulpprogramma's.

    Tip

    Functies worden weergegeven in de volgorde waarin ze het meeste werk uitvoeren (ze staan niet in de oproepvolgorde). Hiermee kunt u snel de langst lopende functies identificeren.

  2. Dubbelklik in de lijst met functies op een van uw app-functies die veel werk doen.

    Wanneer u dubbelklikt op een functie, wordt de weergave Functions geopend in het linkerdeelvenster. Selecteer Beller/Callee weergave in de vervolgkeuzelijst.

    Schermopname van diagnostische hulpprogramma's met de weergave Caller Callee.

    In deze weergave wordt de geselecteerde functie weergegeven in de kop en in het vak Huidige functie (DoWork, in dit voorbeeld). De functie die de huidige functie aanroept, wordt aan de linkerkant weergegeven onder Aanroepende functiesen alle functies die door de huidige functie worden aangeroepen, worden weergegeven in vak Functies aangeroepen aan de rechterkant. (U kunt een van de selectievakjes selecteren om de huidige functie te wijzigen.)

    In deze weergave ziet u de totale tijd (ms) en het percentage van de totale runtime van de app die nodig is om de functie te voltooien. functietekst toont ook de totale hoeveelheid tijd (en het percentage tijd) dat in de hoofdtekst van de functie is besteed, met uitzondering van de tijd die is besteed aan het aanroepen en aanroepen van functies.

    Wanneer u dubbelklikt op een functie, wordt de weergave Caller/Callee geopend in het linkerdeelvenster.

    Schermopname van diagnostische hulpprogramma's met de weergave Caller Callee.

    In deze weergave wordt de geselecteerde functie weergegeven in de kop en in het vak Huidige functie (GetNumber, in dit voorbeeld). De functie die de huidige functie aanroept, wordt aan de linkerkant weergegeven onder Aanroepende functiesen alle functies die door de huidige functie worden aangeroepen, worden weergegeven in vak Functies aangeroepen aan de rechterkant. (U kunt een van de selectievakjes selecteren om de huidige functie te wijzigen.)

    In deze weergave ziet u de totale tijd (ms) en het percentage van de totale runtime van de app die nodig is om de functie te voltooien. functietekst toont ook de totale hoeveelheid tijd (en het percentage tijd) dat in de hoofdtekst van de functie is besteed, met uitzondering van de tijd die is besteed aan het aanroepen en aanroepen van functies. (In dit voorbeeld zijn 2367 van de 2389 ms besteed in de hoofdtekst van de functie en zijn de resterende 22 ms besteed aan externe code die door deze functie wordt aangeroepen).

    Tip

    Hoge waarden in functietekst kunnen duiden op een prestatieknelpunt binnen de functie zelf.

  3. Als u een weergave op een hoger niveau wilt weergeven met de volgorde waarin de functies worden aangeroepen, selecteert u Oproepstructuur in de vervolgkeuzelijst bovenaan het deelvenster.

    Elk genummerd gebied in de afbeelding heeft betrekking op een stap in de procedure.

    Diagnostische hulpprogramma's oproepstructuur

    Beeld Beschrijving
    stap 1 Het knooppunt op het hoogste niveau in de aanroepstructuur voor CPU-gebruik, die de toepassing vertegenwoordigt.
    stap 2 Wanneer in de meeste apps de optie Externe code weergeven is uitgeschakeld, is het tweede knooppunt een knooppunt [Externe code] knooppunt dat de systeem- en frameworkcode bevat die de app start en stopt, de gebruikersinterface tekent, de planning van threads beheert en andere services op laag niveau aan de app levert.
    stap 3 De kinderen van het tweede-niveau knooppunt zijn de methoden voor gebruikerscode en asynchrone routines die worden aangeroepen of gemaakt door de systeem- en frameworkcode van het tweede niveau.
    stap 4 Onderliggende knooppunten van een methode bevatten alleen gegevens voor de aanroepen van de bovenliggende methode. Wanneer Externe code weergeven is uitgeschakeld, kunnen app-methoden ook een [externe code] knooppunt bevatten.

    Hier vindt u meer informatie over de kolomwaarden:

    • totale CPU- geeft aan hoeveel werk is uitgevoerd door de functie en eventuele functies die door de functie zijn aangeroepen. Hoge totale CPU-waarden verwijzen naar de functies die over het algemeen het duurst zijn.

    • self-CPU- geeft aan hoeveel werk is uitgevoerd door de code in de hoofdtekst van de functie, met uitzondering van het werk dat door functies is uitgevoerd die door de functie zijn aangeroepen. Hoge eigen CPU waarden kunnen duiden op een prestatieknelpunt in de functie zelf.

    • Modules De naam van de module met de functie of het aantal modules met de functies in een knooppunt [Externe code].

    Als u de functieaanroepen wilt zien die het hoogste percentage van de CPU gebruiken in de weergave oproepstructuur, klikt u op Dynamisch pad uitvouwen. Het hot path kan u helpen uw onderzoek te richten op het gebied dat de grootste impact zou hebben.

    nl-NL: Screenshot dat de Diagnostics Tools Hot Path laat zien.

    Notitie

    Als u code in de aanroepstructuur ziet die is gemarkeerd als 'verbroken' code of 'onloopbare stack', geeft dit aan dat Gebeurtenissen traceren voor Windows-gebeurtenissen (ETW) waarschijnlijk zijn verwijderd. Probeer dezelfde tracering een tweede keer te verzamelen om het probleem op te lossen.

  1. Als u een andere weergave van de gegevens wilt zien, selecteert u Flame Graph in de vervolgkeuzelijst bovenaan het deelvenster.

    De vlamgrafiek biedt een andere visualisatie van de aanroepstructuur die u kan helpen de gegevens te analyseren. Zie Dynamische paden identificeren met een vlamgrafiekvoor meer informatie.

  2. Als u weergaven wilt bekijken van de gegevens die zijn samengevoegd op functie of module, selecteert u Functions of Modules in de vervolgkeuzelijst boven aan het deelvenster.

    Deze weergaven helpen bij het identificeren van functies of modules die prestatieknelpunten kunnen zijn vanwege een combinatie van hoog aantal aanroepen en/of prestatieproblemen.

    Schermopname van de functieweergave Diagnostische hulpprogramma's.

Externe code weergeven

Externe code zijn functies in systeem- en frameworkonderdelen die worden uitgevoerd door de code die u schrijft. Externe code bevat functies die de app starten en stoppen, de gebruikersinterface tekenen, threading beheren en andere services op laag niveau aan de app leveren. In de meeste gevallen bent u niet geïnteresseerd in externe code en verzamelt het hulpprogramma CPU-gebruik de externe functies van een gebruikersmethode in één [Externe aanroep] knooppunt.

Als u de aanroeppaden van externe code wilt weergeven, schakelt u de selectie uit Alleen mijn code weergeven in de lijst Instellingen en kiest u vervolgens Toepassen.

Schermopname met Instellingen en vervolgens Alleen mijn code weergeven.

Externe code zijn functies in systeem- en frameworkonderdelen die worden uitgevoerd door de code die u schrijft. Externe code bevat functies die de app starten en stoppen, de gebruikersinterface tekenen, threading beheren en andere services op laag niveau aan de app leveren. In de meeste gevallen bent u niet geïnteresseerd in externe code en verzamelt het hulpprogramma CPU-gebruik de externe functies van een gebruikersmethode in één [Externe code] knooppunt.

Als u de aanroeppaden van externe code wilt weergeven, kiest u Externe code weergeven in de filterweergave lijst en kiest u vervolgens Toepassen.

Schermopname die toont de optie om Filterweergave te kiezen en vervolgens de externe code weer te geven.

Houd er rekening mee dat veel aanroepketens van externe code diep genest zijn, zodat de breedte van de kolom Functienaam de weergavebreedte van alle computermonitors kan overschrijden. Als dit gebeurt, worden functienamen weergegeven als [...].

Gebruik het zoekvak om een knooppunt te vinden dat u zoekt en gebruik vervolgens de horizontale schuifbalk om de gegevens in beeld te brengen.

Tip

Als u externe code profileert die Windows-functies aanroept, moet u ervoor zorgen dat u de meest recente hebt.pdb- bestanden. Zonder deze bestanden worden in uw rapportweergaven windows-functienamen weergegeven die cryptisch en moeilijk te begrijpen zijn. Voor meer informatie over hoe u kunt controleren of u de benodigde bestanden hebt, zie Symbool (.pdb) en bronbestanden opgeven in de debugger.

Volgende stappen

In deze zelfstudie hebt u geleerd hoe u CPU-gebruiksgegevens verzamelt en analyseert. Als u de rondleiding van de profileral hebt voltooid, kunt u een tutorial volgen die uitlegt hoe u de hulpprogramma's effectiever kunt gebruiken.

In deze zelfstudie hebt u geleerd hoe u cpu-gebruiksgegevens verzamelt en analyseert tijdens foutopsporing. Mogelijk wilt u meer te weten komen over het profileren van release builds met behulp van de Prestatieprofiler.