Az alkalmazás teljesítményének mérése a cpu-kihasználtság elemzésével (C#, Visual Basic, C++, F#)

A hibakeresővel integrált CPU-használat diagnosztikai eszközzel végzett hibakeresés során teljesítményproblémákat talál. A processzorhasználatot hibakereső csatolása nélkül vagy egy futó alkalmazás megcélzásával is elemezheti. További információ: Profilkészítési eszközök futtatása kiadási vagy hibakeresési buildeken és Teljesítmény elemzése a cpu-profilkészítésihasználatával.

Amikor a hibakereső szünetel, a Diagnosztikai eszközök ablakban található CPU-használat eszköz információkat gyűjt az alkalmazásban végrehajtó függvényekről. Az eszköz felsorolja a munkát végző függvényeket, és egy ütemtervdiagramot biztosít, amellyel a mintavételezési munkamenet adott szegmenseire összpontosíthat.

Fontos

A hibakereső által integrált diagnosztikai eszközök támogatottak a Visual Studio .NET-fejlesztéséhez, beleértve a ASP.NET, a ASP.NET Core és a natív/C++ fejlesztést. A megfelelő Visual Studio számítási feladat szükséges. A hibakeresővel (Diagnosztikai eszközök ablak) rendelkező profilkészítő eszközök futtatásához Windows 8 és újabb verziókra van szükség.

Ebben az oktatóanyagban a következőket fogja megtanulni:

  • CPU-kihasználtsági adatok gyűjtése
  • Cpu-kihasználtsági adatok elemzése

1. lépés: CPU-kihasználtsági adatok gyűjtése

  1. Nyissa meg a Visual Studióban hibakeresésre használni kívánt projektet, és állítson be egy töréspontot az alkalmazásban azon a ponton, ahol meg szeretné vizsgálni a processzorhasználatot.

  2. Állítson be egy második töréspontot az elemezni kívánt kód függvényének vagy régiójának végén.

    Két töréspont beállításával az adatgyűjtést a kód elemezni kívánt részeire korlátozhatja.

  3. A Diagnosztikai eszközök ablak automatikusan megjelenik, kivéve, ha kikapcsolta. Az ablak újbóli megjelenítéséhez kattintson Hibakeresés>Windows>Diagnosztikai eszközök megjelenítéseelemre.

  4. Az eszköztár Eszközök kijelölése beállításával kiválaszthatja, hogy megjelenjen-e a processzorhasználat, a memóriahasználat, vagy mindkettő. Ha a Visual Studio Enterprise-t futtatja, az IntelliTrace-t is engedélyezheti vagy letilthatja az Eszközök>Beállítások>IntelliTrace.

    Képernyőkép az Eszközök kiválasztása menüről.

    Diagnosztikai eszközöket bemutató képernyőkép.

    Elsősorban a processzorkihasználtságot fogjuk figyelembe venni, ezért győződjön meg arról, hogy processzorhasználati engedélyezve van (alapértelmezés szerint engedélyezve van).

  5. Kattintson a(z) Hibakeresés>Hibakeresés indítása gombra (vagy a(z) Indítás gombra az eszköztáron, vagy nyomja meg a(z) F5billentyűt).

    Amikor az alkalmazás betöltődik, megjelenik a Diagnosztikai eszközök összefoglaló nézete. Ha meg kell nyitnia az ablakot, kattintson Hibakeresés>Windows>Diagnosztikai eszközök megjelenítéseelemre.

    Képernyőkép a Diagnosztikai eszközök összefoglalás lapról.

    Diagnosztikai eszközök összefoglaló lapjának képernyőképe.

    További információért az eseményekről lásd: a Diagnosztikai eszközök ablakának Események lapjának keresése és szűrése.

  6. Futtassa azt a forgatókönyvet, amely az első töréspont aktiválását okozza.

  7. Amíg a hibakereső szüneteltetve van, engedélyezze a processzorhasználati adatok gyűjtését, majd nyissa meg a CPU-használat lapot.

    Képernyőkép a CPU-használat lapról.

    Amikor a Felvétel indítása lehetőséget választja, a Visual Studio elkezdi rögzíteni a függvényeket, és mennyi időt vesz igénybe a végrehajtásuk. Ezeket az összegyűjtött adatokat csak akkor tekintheti meg, ha az alkalmazás leállt egy törésponton.

    Képernyőkép, amely azt mutatja, hogy a Diagnosztikai eszközök engedélyezik a CPU-profilkészítést.

    Amikor a CPU-profil rögzítéselehetőséget választja, a Visual Studio elkezdi rögzíteni a függvényeket, és a végrehajtásukhoz szükséges időt. Ezeket az összegyűjtött adatokat csak akkor tekintheti meg, ha az alkalmazás leállt egy törésponton.

  8. Nyomja le az F5 billentyűt az alkalmazás futtatására a második töréspontig.

    Most már rendelkezik az alkalmazás teljesítményadataival, kifejezetten a két töréspont között futó kód régiójára vonatkozóan.

    A profilkészítő megkezdi a száladatok előkészítését. Várjon, amíg befejeződik.

    Az adatok előkészítését bemutató képernyőkép a Diagnosztikai eszközökről.

    A diagnosztikai eszközök szálak előkészítését bemutató képernyőképe.

    A CPU-használat eszköz megjeleníti a jelentést a CPU-használat lapon.

    A Diagnostics Tools CPU-használat lapjának képernyőképe.

    Diagnosztikai eszközök CPU használat lapjának képernyőképe.

  9. Ha egy konkrétabb elemezendő kódterületet szeretne kijelölni, válasszon ki egy régiót a CPU idővonalán (a profilkészítési adatokat megjelenítő régiónak kell lennie).

    Képernyőkép, amelyen az időszegmenst választó diagnosztikai eszközök láthatók.

    Ezen a ponton megkezdheti az adatok elemzését. Ha nem tud adatokat gyűjteni vagy megjeleníteni, olvassa el Profilkészítési hibák elhárítása ésproblémák elhárítása című témakört.

    Borravaló

    A teljesítményproblémák azonosításakor több mérést kell végeznie. A teljesítmény természetesen eltér a futtatástól, és a kód elérési útjai általában lassabban futnak az első futtatáskor az egyszeri inicializálási munka, például a DLL-ek betöltése, a JIT-összeállítási módszerek és a gyorsítótárak inicializálása miatt. Ha több mérést végez, jobb képet kaphat a megjelenített metrika tartományáról és mediánjáról, így összehasonlíthatja az első alkalommal a kódterület állandó állapotú teljesítményét.

2. lépés: Cpu-kihasználtsági adatok elemzése

Javasoljuk, hogy kezdje el elemezni az adatokat a CPU-használat alatt lévő függvények listájának vizsgálatával, a leginkább működő függvények azonosításával, majd az egyes függvények részletesebb vizsgálatával.

  1. A Top Functions listában vizsgálja meg, hogy melyek azok a függvények, amelyek a legtöbbet dolgoznak.

    Képernyőkép a Top Functions listáról.

  2. A Top Functions listában válasszon ki egy olyan alkalmazásfüggvényt, amely sok munkát végez.

    Ha kiválaszt egy függvényt, a Függvények nézet a bal oldali panelen nyílik meg. Válassza Hívó/Híváskereső nézetet a legördülő menüből.

    Borravaló

    A bal oldali panelen lévő függvények sorrendben jelennek meg, kezdve azokkal, akik a legtöbb munkát végzik (nem hívási sorrendben vannak). Ez segít a leghosszabb ideig futó függvények gyors azonosításában.

    Képernyőkép a Diagnosztikai eszközök hívó/ Híváskezelő nézetről.

    Ebben a nézetben a kijelölt függvény megjelenik a címsorban és az Aktuális függvény mezőben (Ebben a példában a DoWork). A bal oldalon a Hívó függvényekmező alatt az aktuális függvényt meghívó függvény látható, a jobb oldali Hívott függvények mezőben pedig az aktuális függvény által hívott függvények jelennek meg. (Az aktuális függvény módosításához bármelyik jelölőnégyzetet kijelölheti.)

    Ez a nézet megmutatja a függvény teljesítéséhez szükséges teljes időt (ms), valamint az összesített alkalmazás futási idejének százalékos arányát, amelyet a függvény használ fel. függvénytörzs a függvénytörzsben töltött teljes időt (és az idő százalékát) is megjeleníti, kizárva a hívásokkal és a hívott függvényekkel töltött időt.

    Borravaló

    A függvény törzsének magas értékei teljesítménybeli szűk keresztmetszetet jelezhetnek magában a függvényben.

  3. Ha magasabb szintű nézetet szeretne látni, amely a függvények meghívásának sorrendjét mutatja, válassza Hívásfa lehetőséget a panel tetején található legördülő listából.

    Az ábrán szereplő egyes számozott területek az eljárás egy lépéséhez kapcsolódnak.

    Képernyőkép a Diagnosztikai eszközök hívásfáról.

    Image Leírás
    1. lépés A CPU-használat hívásfa legfelső szintű csomópontja, amely az alkalmazást jelöli.
    2. lépés A legtöbb alkalmazásban, ha a Külső kód megjelenítése lehetőség le van tiltva, a második szintű csomópont egy [Külső hívás] csomópont, amely tartalmazza az alkalmazást indító és leálló rendszer- és keretrendszerkódot, megrajzolja a felhasználói felületet, vezérli a szálütemezést, és egyéb alacsony szintű szolgáltatásokat biztosít az alkalmazás számára.
    3. lépés A második szintű csomópont gyermekei a felhasználói kód metódusai és aszinkron rutinok, amelyeket a második szintű rendszer és a keretrendszerkód hív vagy hoz létre.
    4. lépés A metódus gyermekcsomópontjai csak a szülőmetódus hívásaihoz tartalmaznak adatokat. Ha a Külső kód megjelenítése le van tiltva, az alkalmazás metódusai [Külső hívás] csomópontot is tartalmazhatnak.

    Az oszlopértékekkel kapcsolatos további információk:

    • Teljes CPU- azt jelzi, hogy a függvény és az általa hívott függvények mennyi munkát végeztek. A magas teljes CPU-értékek a legköltségesebb függvényeket jelölik.

    • A önálló CPU azt jelzi, milyen mennyiségű munkát végzett a függvény törzsének kódja, kizárva az általa hívott függvények által végzett munkát. A magas saját CPU- értékek teljesítménybeli szűk keresztmetszetet jelezhetnek a függvényen belül.

    • Modulok A függvényt tartalmazó modul neve vagy a függvényeket tartalmazó modulok száma egy [Külső hívás] csomópontban.

    A hívásfa nézetben a processzor legnagyobb százalékát használó függvényhívások megtekintéséhez kattintson a A gyakori elérési út kibontásaelemre. A kritikus útvonal segíthet a vizsgálatot azokra a területekre összpontosítani, amelyek a legnagyobb hatással vannak.

    Képernyőkép a hívásfa gyakori elérésű útvonaláról.

    Jegyzet

    Ha a hívásfában "hibás" kódként vagy "nem végigjárható veremként" megjelölt kódot lát, ez arra utal, hogy a Windows eseménykövetésének eseményei valószínűleg eldobásra kerültek. Próbálja meg másodszor is összegyűjteni ugyanazt a nyomkövetést a probléma megoldásához.

  4. Ha más nézetet szeretne látni az adatokról, válassza Flame Graph a panel tetején található legördülő listából.

    A lángdiagram a hívásfa más vizualizációját biztosítja, amely segíthet az adatok elemzésében. További információ: Gyakori elérésű útvonalak azonosítása lángdiagrammal.

  5. Ha a függvények vagy modulok szerint összesített adatok nézeteit szeretné megtekinteni, válassza a Függvények vagy Modulok lehetőséget a panel tetején található legördülő listából.

    Ezek a nézetek segítenek azonosítani azokat a függvényeket vagy modulokat, amelyek a magas hívásszám és/vagy teljesítményproblémák kombinációja miatt teljesítménybeli szűk keresztmetszetek lehetnek.

    Diagnostics Tools Functions nézetet bemutató képernyőkép.

  1. A függvénylistában vizsgálja meg azokat a függvényeket, amelyek a legtöbbet dolgoznak.

    A Diagnosztikai eszközök PROCESSZORhasználati függvényeinek listáját bemutató képernyőkép.

    Borravaló

    A függvények sorrendben jelennek meg, kezdve azokkal, amelyek a legtöbb munkát végzik (nem a hívásuk sorrendjében). Ez segít a leghosszabb ideig futó függvények gyors azonosításában.

  2. A függvénylistában kattintson duplán az egyik olyan alkalmazásfüggvényre, amely sok munkát végez.

    Ha duplán kattint egy függvényre, megnyílik a Függvények nézet a bal oldali panelen. Válassza Hívó/Híváskereső nézetet a legördülő menüből.

    Képernyőkép, amely a Diagnosztikai Eszközök Hívó-Hívott Nézetét jeleníti meg.

    Ebben a nézetben a kijelölt függvény megjelenik a címsorban és az Aktuális függvény mezőben (Ebben a példában a DoWork). A bal oldalon a Hívó függvényekmező alatt az aktuális függvényt meghívó függvény látható, a jobb oldali Hívott függvények mezőben pedig az aktuális függvény által hívott függvények jelennek meg. (Az aktuális függvény módosításához bármelyik jelölőnégyzetet kijelölheti.)

    Ez a nézet megmutatja a függvény teljesítéséhez szükséges teljes időt (ms), valamint az összesített alkalmazás futási idejének százalékos arányát, amelyet a függvény használ fel. függvénytörzs a függvénytörzsben töltött teljes időt (és az idő százalékát) is megjeleníti, kizárva a hívásokkal és a hívott függvényekkel töltött időt.

    Borravaló

    A függvény törzsének magas értékei teljesítménybeli szűk keresztmetszetet jelezhetnek magában a függvényben.

  3. Ha magasabb szintű nézetet szeretne látni, amely a függvények meghívásának sorrendjét mutatja, válassza Hívásfa lehetőséget a panel tetején található legördülő listából.

    Az ábrán szereplő egyes számozott területek az eljárás egy lépéséhez kapcsolódnak.

    Diagnosztikai eszközök Hívásfa

    Image Leírás
    1. lépés A CPU-használat hívásfa legfelső szintű csomópontja, amely az alkalmazást jelöli.
    2. lépés A legtöbb alkalmazásban, amikor a Külső kód megjelenítése lehetőség le van tiltva, a második szintű csomópont egy [Külső kód] csomópont, amely tartalmazza az alkalmazást indító és leállító rendszert és keretrendszerkódot, megrajzolja a felhasználói felületet, vezérli a szálütemezést, és egyéb alacsony szintű szolgáltatásokat biztosít az alkalmazás számára.
    3. lépés A második szintű csomópont gyermekei a felhasználói kód metódusai és aszinkron rutinok, amelyeket a második szintű rendszer és a keretrendszerkód hív vagy hoz létre.
    4. lépés A metódus gyermekcsomópontjai csak a szülőmetódus hívásaihoz tartalmaznak adatokat. Ha Külső kód megjelenítése le van tiltva, az alkalmazásmetelyek [Külső kód] csomópontot is tartalmazhatnak.

    Az oszlopértékekkel kapcsolatos további információk:

    • Teljes CPU- azt jelzi, hogy a függvény és az általa hívott függvények mennyi munkát végeztek. A magas teljes CPU-értékek a legköltségesebb függvényeket jelölik.

    • A önálló CPU azt jelzi, milyen mennyiségű munkát végzett a függvény törzsének kódja, kizárva az általa hívott függvények által végzett munkát. A magas saját CPU- értékek teljesítménybeli szűk keresztmetszetet jelezhetnek a függvényen belül.

    • modulok A függvényt tartalmazó modul neve vagy a függvényeket tartalmazó modulok száma egy [Külső kód] csomópontban.

    A hívásfa nézetben a processzor legnagyobb százalékát használó függvényhívások megtekintéséhez kattintson a A gyakori elérési út kibontásaelemre. A kritikus útvonal segíthet a vizsgálatot azokra a területekre összpontosítani, amelyek a legnagyobb hatással vannak.

    A diagnosztikai eszközök gyakori elérési útját bemutató képernyőkép.

    Jegyzet

    Ha a hívásfában "hibás" kódként vagy "nem végigjárható veremként" megjelölt kódot lát, ez arra utal, hogy a Windows eseménykövetésének eseményei valószínűleg eldobásra kerültek. Próbálja meg másodszor is összegyűjteni ugyanazt a nyomkövetést a probléma megoldásához.

  4. Ha más nézetet szeretne látni az adatokról, válassza Flame Graph a panel tetején található legördülő listából.

    A lángdiagram a hívásfa más vizualizációját biztosítja, amely segíthet az adatok elemzésében. További információ: Gyakori elérésű útvonalak azonosítása lángdiagrammal.

  5. Ha a függvények vagy modulok szerint összesített adatok nézeteit szeretné megtekinteni, válassza a Függvények vagy Modulok lehetőséget a panel tetején található legördülő listából.

    Ezek a nézetek segítenek azonosítani azokat a függvényeket vagy modulokat, amelyek a magas hívásszám és/vagy teljesítményproblémák kombinációja miatt teljesítménybeli szűk keresztmetszetek lehetnek.

    Diagnostics Tools Functions nézetet bemutató képernyőkép.

Külső kód megtekintése

A külső kód olyan rendszer- és keretrendszerösszetevők függvényei, amelyeket az ön által írt kód hajt végre. A külső kód olyan függvényeket tartalmaz, amelyek elindítják és leálltatják az alkalmazást, megrajzolják a felhasználói felületet, vezérlik a szálkezelést, és egyéb alacsony szintű szolgáltatásokat biztosítanak az alkalmazásnak. A legtöbb esetben nem érdekli a külső kód, ezért a CPU-használat eszköz egy felhasználói metódus külső funkcióit egyetlen [Külső hívás] csomópontba gyűjti.

Ha meg szeretné tekinteni a külső kód hívási útvonalait, törölje a Show Just My Code jelölését a fő Beállítások lista Diagnosztikai eszközök ablakában, majd válassza az Alkalmaz lehetőséget.

Képernyőkép a Csak a kód megjelenítése lehetőségről.

A külső kód olyan rendszer- és keretrendszerösszetevők függvényei, amelyeket az ön által írt kód hajt végre. A külső kód olyan függvényeket tartalmaz, amelyek elindítják és leálltatják az alkalmazást, megrajzolják a felhasználói felületet, vezérlik a szálkezelést, és egyéb alacsony szintű szolgáltatásokat biztosítanak az alkalmazásnak. A legtöbb esetben nem érdekli a külső kód, ezért a CPU-használat eszköz egy felhasználói metódus külső funkcióit egyetlen [Külső hívás] csomópontba gyűjti.

Ha meg szeretné tekinteni a külső kód hívási útvonalait, távolítsa el a jelölést a Csak saját kód megjelenítése négyzetből a Beállítások listában, majd válassza az Alkalmazáslehetőséget.

Képernyőkép, amely a Beállításokat és a Csak a saját kódom megjelenítése opciót mutatja.

Vegye figyelembe, hogy számos külső kódhívási lánc mélyen beágyazva van, így a függvénynév oszlop szélessége meghaladhatja az összes, de a legnagyobb számítógép-monitorok megjelenítési szélességét. Ha ez történik, a függvénynevek [...]jelennek meg.

A keresőmezővel keresse meg a keresett csomópontot, majd a vízszintes görgetősávon jelenítse meg az adatokat.

Borravaló

Ha külső kódot profiloz, amely Windows-függvényeket hív meg, győződjön meg arról, hogy a legfrissebbpdb fájlokat használja. Ezek a fájlok nélkül a jelentésnézetek olyan Windows-függvényneveket fognak felsorolni, amelyek rejtélyesek és nehezen érthetők. Ha többet szeretne megtudni arról, hogyan biztosíthatja, hogy rendelkezzen a szükséges fájlokkal, olvassa el a következő részt: Szimbólum (.pdb) és forrásfájlok megadása a hibakeresőben.

Következő lépések

Ebben az oktatóanyagban megtanulta, hogyan gyűjthet és elemezhet processzorhasználati adatokat. Ha már befejezte a profilozótúráját, érdemes lehet áttekinteni egy oktatóanyagot, amely bemutatja, hogyan lehet az eszközöket hatékonyabban használni.

Esettanulmány: Útmutató a kód optimalizálásához

Ebben az oktatóanyagban megtanulta, hogyan gyűjthet és elemezhet processzorhasználati adatokat hibakeresés közben. Érdemes lehet többet megtudni a kiadási buildek profilkészítéséről a Performance Profiler használatával.