Teljesítmény elemzése cpu-profilkészítéssel a Teljesítményprofilozóban (C#, Visual Basic, C++, F#)
Az alkalmazás teljesítményproblémáinak vizsgálatához jó módszer a processzorhasználat cpu-profilozóval való megismerése. A Visual Studio processzorhasználati teljesítményeszköze a C++, C#/Visual Basic környezetben a kód végrehajtásával töltött aktív processzorhasználati időt és százalékot mutatja.
A CPU-használat eszköz a következő segítségére lehet:
A csapat kódbázisában lévő lassú vagy lefagyó folyamatok diagnosztizálása. Az eszköz segíthet diagnosztizálni a csapat éles kódjának problémáját. Automatikus elemzéseket és különböző nézeteket biztosít az adatokról, így elemezheti és diagnosztizálhatja a teljesítményproblémákat.
A DevOps-forgatókönyvek teljesítményproblémáinak azonosítása Az eszköz például segíthet, ha az ügyfél azt jelenti, hogy egyes kérések vagy megrendelések nem jutnak el a kiskereskedelmi webhelyre a főszezonban. A problémák gyakran a gyártási környezetben jelentkeznek, és akkor nehéz a hibakeresés, de ez az eszköz segíthet elegendő információ és bizonyíték gyűjtésében. A nyomkövetési fájl összegyűjtése után az elemzés segítségével gyorsan megértheti a lehetséges okokat, és javaslatokat tehet a kód kontextusában, hogy elvégezhesse a következő lépéseket a probléma megoldásához.
Magas processzorhasználat ellenőrzése Ha a késési probléma nem szerepel egy API-kérésben, akkor ellenőrizheti a processzorhasználati eszközzel kapcsolatos magas processzorhasználatot és egyéb kapcsolódó problémákat. A CPU-használat eszközzel azonosíthatja a szűk keresztmetszeteket, így szűkítheti az optimalizálás helyét.
A CPU-kihasználtság eszköz mind a helyi naplózási munkamenetek, mind pedig az éles környezetek esetében hasznos. A CPU használat eszköz futtatásához használja a billentyűparancsot, Alt+F2, majd válassza a CPU használat, vagy nyisson meg egy már összegyűjtött nyomkövetést olyan eszközökkel, mint a dotnet-trace vagy a dotnet-monitor. (.NET éles kód esetében valószínűleg így gyűjtene trace-eket.)
A CPU-használat eszközt futtathatja egy megnyitott Visual Studio-projektben, egy telepített Microsoft Store-alkalmazásban, vagy egy futó alkalmazáshoz vagy folyamathoz csatolva. A processzorhasználati eszközt kiadási vagy hibakeresési buildeken futtathatja. További információ: Profilkészítési eszközök futtatása kiadási vagy hibakeresési verziókon.
Az alábbi utasítások bemutatják, hogyan használhatja a CPU-használat eszközt hibakereső nélkül a Visual Studio Performance Profiler használatával. A példák egy helyi gépen lévő kiadási buildet használnak. A kiadási buildek biztosítják a legjobb képet az alkalmazás tényleges teljesítményéről. A processzorhasználati eszköz használatával a teljesítmény javítását bemutató oktatóanyagért tekintse meg Esettanulmányt: Útmutató a kódoptimalizálásához.
A helyi gép általában a telepített alkalmazásvégrehajtást replikálja a legjobban. Ha távoli eszközről szeretne adatokat gyűjteni, futtassa az alkalmazást közvetlenül az eszközön, ne távoli asztali kapcsolaton keresztül.
CPU-kihasználtsági adatok gyűjtése
A Visual Studio-projektben állítsa be a megoldáskonfigurációt a kiadási , és válassza ki a Helyi Windows Hibakereső (vagy Helyi gép) lehetőséget üzembehelyezési célként.
Válassza a Hibakeresés>Teljesítményprofil lehetőséget.
Az Elérhető eszközökterületen válassza a Processzorhasználatlehetőséget, majd a Startlehetőséget.
Ha a profilkészítő indítása előtt engedélyezi a Indítás szüneteltetve opciót, nem kerülnek gyűjtésre adatok, amíg a diagnosztikai munkamenet nézetben a Rögzít gombot nem választja.
Jegyzet
Az eszköz hatékonyabbá tétele érdekében további információt Profiler beállításainak optimalizálásacímű témakörben talál.
Az alkalmazás elindítása után a diagnosztikai munkamenet megkezdődik, és megjeleníti a processzorhasználati adatokat. Ha befejezte az adatgyűjtést, válassza a Adatgyűjtés leállításalehetőséget.
A CPU-használat eszköz elemzi az adatokat, és megjeleníti a jelentést. 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.
A Szűrő legördülő listában jelölje ki vagy törölje a megjelenítendő szálak kijelölését, és a Keresés mezőben keressen egy adott szálat vagy csomópontot.
CPU-kihasználtsági adatoszlopok
Név | Leírás |
---|---|
Teljes PROCESSZOR [egység, %] |
![]() A processzorszámítási idő ezredmásodperce, valamint a függvény hívásai által használt processzorszázalék, valamint a függvény által hívott függvények a kiválasztott időtartományban. Ez eltér a cpu-kihasználtság idősordiagramtól, amely összehasonlítja az időtartományban lévő teljes CPU-tevékenységet a teljes rendelkezésre álló cpu-val. |
Saját CPU [egység, %] |
![]() A processzorszámítási idő ezredmásodperce és a függvényhez intézett hívások által használt processzorszázalék a kiválasztott időtartományban, a függvény által hívott függvények kivételével. |
modul | Egyes nézetekben megjelenik a Modul oszlop, amely a függvényt tartalmazó modul nevét jeleníti meg. |
A CPU-elemzések elemzése
Ha a Top Insights szakaszban bármilyen megállapítás megjelenik, a megadott hivatkozással további információt kaphat az azonosított problémáról. Emellett a Copilot használata esetén a A Copilot kérése gomb megnyitja a Copilot csevegőablakát, és a Copilot javaslatokat ad a kód és az azonosított problémák alapján.
További információ: CPU Insights.
Cpu-kihasználtság elemzése
A PROCESSZORhasználati jelentés elemzéséhez kattintson a Részletek megnyitásaelemre, vagy kattintson az egyik felső függvényre a Függvények nézet megnyitásához.
A jelentés különböző nézeteket biztosít a diagnosztikai adatokról:
Megtekintés | Leírás |
---|---|
Hívó/hívott | Egy adott függvény processzoridejének részletes nézete, az azt meghívó függvény(ek) és a meghívott függvény(ek) részletes nézete. A teljesítményadatok összesítve lesznek az adatgyűjtési időszakra vonatkozóan. A hívási útvonal bejárásához kiválaszthatja a hívó és hívott függvényeket. |
Hívásfa | A függvény hívási útvonalának hierarchikus nézete. A legtöbb processzoridőt igénybe vevő forró útvonalak azonosítására szolgál. |
Modulok | Az egyes modulokban töltött cpu-idő megtekintése az adatgyűjtési időszakban összesítve. Olyan modulok azonosítására szolgál, 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. |
Funkciók | Az egyes függvényekben töltött cpu-idő megtekintése az adatgyűjtési időszakban összesítve. Azon függvények azonosítására használható, amelyek a magas hívásszám és/vagy teljesítményproblémák kombinációja miatt lehetnek teljesítménybeli szűk keresztmetszetek. |
Flame graph | A függvény hívási útvonalának hierarchikus nézete egy lánggráfos vizualizációban. A legtöbb processzoridőt igénybe vevő hívási útvonalak (forró útvonal) azonosítására szolgál. |
A jelentés elemzéséhez kattintson a Részletes jelentés létrehozásaelemre.
A jelentés különböző nézeteket biztosít a diagnosztikai adatokról:
- Hívó/hívott
- Hívásfa
A hívó/hívott nézet kivételével minden nézetben a diagnosztikai jelentés a Teljes CPUalapján van rendezve, a legmagasabbtól a legalacsonyabbig. Az oszlopfejlécek kiválasztásával módosíthatja a rendezési sorrendet vagy a rendezési oszlopot. Kattintson duplán egy olyan függvényre, amely érdekli, és látni fogja a függvény forrását, valamint kiemelve, hogy hol van az adott függvényben töltött idő. A táblázat olyan adatokat tartalmazó oszlopokat jelenít meg, mint például a függvényben töltött idő, beleértve a hívott függvényeket (Teljes CPU), valamint egy második oszlop, amely a függvényben töltött időt jeleníti meg, kivéve a hívott függvényeket (Önálló CPU).
Ezek az adatok segítenek felmérni, hogy maga a függvény teljesítménybeli szűk keresztmetszet-e. Határozza meg, hogy a metódus mennyi adatot jelenít meg annak megállapításához, hogy a külső kód- vagy futtatókörnyezeti kódtárak miatt a végpontok lassúak vagy erőforrás-használattal járnak-e.
További információért a Flame Graph használatáról, lásd: Azonosítsa a forró útvonalakat a Flame Graph segítségével.
Hívásfa a CPU-használathoz
A hívásfa megtekintéséhez válassza ki a szülőcsomópontot a jelentésben. Alapértelmezés szerint a CPU-használat lap megnyílik a Hívó/Hívásfogadó nézetben. Az Aktuális nézet legördülő listában válassza Hívásfalehetőséget.
A A gyakori elérési út kibontása és Gyakori elérésű útvonal megjelenítése gombokra kattintva megtekintheti azokat a függvényhívásokat, amelyek a hívásfa nézetben a legmagasabb százalékos processzorhasználatot használják.
Hívásfa szerkezet
Kép | Leírás |
---|---|
![]() |
A CPU-használat hívásfa legfelső szintű csomópontja, amely az alkalmazást jelöli. |
![]() |
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ő kód] csomópont. A csomópont tartalmazza az alkalmazást elindí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ásnak. |
![]() |
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. |
![]() |
A metódus gyermekcsomópontjai csak a szülőmetódus hívásaihoz rendelkeznek adatokkal. Ha Külső kód megjelenítése le van tiltva, az alkalmazásmetelyek [Külső kód] csomópontot is tartalmazhatnak. |
Külső kód
A rendszer- és keretrendszerfüggvényeket, amelyeket a kódod hajt végre, azokat nevezik külső kód-nak/nek. A külső kódfüggvények 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 processzorhasználati hívásfa egy felhasználói metódus külső funkcióit gyűjti össze egy [Külső hívás] csomópontba.
A külső kód hívási útvonalainak megtekintéséhez a jelentés főösszegző lapján (jobb oldali ablaktáblán) törölje a jelölést Csak saját kód megjelenítése a Beállítások legördülő listából, majd válassza a Alkalmazlehetőséget. (A Beállítások legördülő lista a jelentés fő összefoglaló oldalán érhető el, nem a részletes nézetekben.)
A rendszer- és keretrendszerfüggvényeket, amelyeket a kódod hajt végre, azokat nevezik külső kód-nak/nek. A külső kódfüggvények 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 processzorhasználati hívásfa egy felhasználói metódus külső függvényeit gyűjti össze egy [Külső kód] csomópontba.
A külső kód hívási útvonalainak megtekintéséhez a diagnosztikai jelentés fő lapján (jobb oldali ablaktáblán) válassza a Külső kód megjelenítése lehetőséget a Szűrő legördülő listában, majd válassza a Alkalmazlehetőséget. A Hívásfa nézete a CPU-használat oldalon később kibontja a külső kódhívásokat. (A szűrő legördülő lista a fő diagnosztikai oldalon érhető el, nem pedig a részletes nézetekben.)
Ha letiltja a Csak a saját kódom megjelenítéselehetőséget, a CPU-használat oldal Hívásfa nézete kibővíti a külső kódhívásokat.
Számos külső kódhívási lánc mélyen beágyazott, így a lánc szélessége meghaladhatja a függvény neve oszlop megjelenítési szélességét. A függvénynevek ezután az alábbi képen látható módon jelennek meg.
Számos külső kódhívási lánc mélyen beágyazott, így a lánc szélessége meghaladhatja a függvény neve oszlop megjelenítési szélességét. A függvénynevek ezután ...néven jelennek meg.
A keresett függvénynév kereséséhez használja a keresőmezőt. Mutasson a kijelölt vonalra, vagy használja a vízszintes görgetősávot az adatok megtekintéséhez.
Aszinkron függvények a CPU-használat hívások fájában
Amikor a fordító aszinkron metódussal találkozik, létrehoz egy rejtett osztályt a metódus végrehajtásának szabályozásához. Fogalmilag az osztály egy állapotgép. Az osztály olyan fordító által létrehozott függvényekkel rendelkezik, amelyek aszinkron módon hívják meg az eredeti metódusokat, valamint a futtatáshoz szükséges visszahívásokat, ütemezőket és iterátorokat. Amikor egy szülőmetódus meghívja az eredeti metódust, a fordító eltávolítja a metódust a szülő végrehajtási környezetéből, és futtatja a rejtett osztály metódusait az alkalmazás végrehajtását vezérlő rendszer- és keretrendszerkód kontextusában. Az aszinkron metódusokat gyakran, de nem mindig hajtják végre egy vagy több különböző szálon. Ez a kód a processzorhasználati hívásfában jelenik meg a [Külső kód] csomópont gyermekeként, közvetlenül a fa felső csomópontja alatt.
Az alábbi példában a [Külső kód] alatti első két csomópont az állapotgép-osztály fordító által generált metódusai. A harmadik csomópont az eredeti metódus hívása.
Bontsa ki a létrehozott metódusokat a folyamatban lévő adatok megjelenítéséhez:
MainPage::GetMaxNumberAsyncButton_Click
csak a tevékenységértékek listáját kezeli, kiszámítja az eredmények maximális értékét, és megjeleníti a kimenetet.MainPage+<GetMaxNumberAsyncButton_Click>d__3::MoveNext
megjeleníti aGetNumberAsync
hívását lezáró 48 tevékenység ütemezéséhez és elindításához szükséges tevékenységet.MainPage::<GetNumberAsync>b__b
azon feladatok tevékenységét mutatja, amelyek aGetNumber
-et hívják meg.
Hívásszám (.NET) gyűjtése
Ha a Függvény nézetben szeretné megtekinteni a hívásszámokat, a profilkészítő elindítása előtt engedélyezheti a beállítást. Ez a beállítás a .NET-projekttípusok esetében támogatott, és a folyamatot a profilkészítő alatt kell elindítani. A csatolási forgatókönyv nem támogatott.
A teljesítményprofilozóban válassza a processzorhasználat Beállítások ikont.
Engedélyezze a Hívásszám gyűjtése (csak .NET) lehetőséget.
Cpu-használati adatok gyűjtése.
Nyissa meg a Functions nézetet, és győződjön meg arról, hogy a Hívásszám oszlop láthatóra van állítva.
Ha nem látja az oszlopot, kattintson a jobb gombbal egy oszlopfejlécre a látható oszlopok kiválasztásához.