Megosztás a következőn keresztül:


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

  1. 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.

    Képernyőkép, amely a Kiadás és a Helyi gép kiválasztása opciókat mutatja.

    A képernyőfelvétel, amely a

  2. Válassza a Hibakeresés>Teljesítményprofil lehetőséget.

  3. Az Elérhető eszközökterületen válassza a Processzorhasználatlehetőséget, majd a Startlehetőséget.

    Képernyőkép a CPU-használat kiválasztásáról.

    Képernyőkép a CPU-használat kiválasztásáról.

    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.

  4. 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.

    Képernyőkép, amely bemutatja a CPU-használati adatgyűjtés leállítását.

    Képernyőkép, amely bemutatja a CPU-használati adatgyűjtés leállítását.

    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.

    CPU-használati jelentést megjelenítő képernyőkép.

    CPU-használati jelentést megjelenítő képernyőkép.

    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, %] Összes % adategyenlet

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, %] Self % egyenlet

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

Hívásfa struktúráját bemutató képernyőkép.

Hívásfa struktúráját bemutató képernyőkép.

Kép 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ő 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.
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 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 Beállítások, majd a

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.)

Képernyőfelvétel, ami a külső kód megjelenítését mutatja.

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.

A hívásfában található beágyazott külső kódot megjelenítő képernyőkép.

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 hívásfában található beágyazott külső kódot megjelenítő képernyőkép.

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.

Beágyazott külső kód keresését bemutató képernyőkép.

Beágyazott külső kód keresését bemutató képernyőkép.

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.

Aszinkron csomópontot megjelenítő képernyőkép.

Bontsa ki a létrehozott metódusokat a folyamatban lévő adatok megjelenítéséhez:

kibővített aszinkron csomópontot bemutató képernyőkép.

kibővített aszinkron csomópontot bemutató képernyőkép.

  • 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 a GetNumberAsynchí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 a GetNumber-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.

  1. A teljesítményprofilozóban válassza a processzorhasználat Beállítások ikont.

    A CPU-használat beállításikonjának képernyőképe.

  2. Engedélyezze a Hívásszám gyűjtése (csak .NET) lehetőséget.

    A CPU-használat beállításait bemutató képernyőkép.

  3. Cpu-használati adatok gyűjtése.

  4. 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.

    A hívásszám adatait megjelenítő képernyőkép.