Sdílet prostřednictvím


Analýza výkonu pomocí profilace procesoru v profileru výkonu (C#, Visual Basic, C++, F#)

Dobrým způsobem, jak začít zkoumat problémy s výkonem ve vaší aplikaci, je porozumět využití procesoru pomocí profileru procesoru. Nástroj sady Visual Studio pro výkon využití procesoru ukazuje dobu aktivního výpočtu procesoru a procento strávené spuštěním kódu v jazyce C++, C# či Visual Basic.

Nástroj Využití procesoru vám může pomoct:

  • Diagnostikujte zpomalení nebo zablokování procesu v základu kódu vašeho týmu. Tento nástroj vám může pomoct s diagnostikou problému s produkčním kódem vašeho týmu. Poskytuje automatické přehledy a různá zobrazení vašich dat, abyste mohli analyzovat a diagnostikovat problémy s výkonem.

  • Identifikovat problémy s výkonem ve scénářích DevOps nástroj může například pomoct, když zákazník hlásí, že některé požadavky nebo objednávky nedostávají na prodejní web během špičky. Často se problémy vyskytují v produkčním prostředí a v té chvíli je náročné je ladit, ale tento nástroj vám může pomoct zachytit dostatek informací a důkazů o problému. Po shromáždění trasovacího souboru vám analýza může rychle pomoct pochopit potenciální příčiny a poskytnout návrhy v kontextu kódu, abyste mohli problém vyřešit pomocí dalších kroků.

  • Zkontrolujte vysoké využití procesoru Pokud váš problém s latencí není v požadavku rozhraní API, můžete zkontrolovat vysoké využití procesoru a další související problémy s nástrojem Využití procesoru. Nástroj Využití procesoru vám může pomoct identifikovat kritické body, abyste mohli zúžit, kde se má optimalizovat.

Nástroj využití procesoru je užitečný jak pro místní trasovací relace, tak pro produkční prostředí. Nástroj Využití procesoru můžete spustit pomocí klávesové zkratky, Alt+F2, a potom zvolit Využití procesoru, nebo otevřením již shromážděného trasování pomocí nástroje, například dotnet-trace, nebo dotnet-monitor. (V případě produkčního kódu .NET je pravděpodobné, že budete shromažďovat trasování.)

Nástroj Využití procesoru můžete spustit v otevřeném projektu sady Visual Studio, v nainstalované aplikaci Microsoft Store nebo můžete připojit ke spuštěné aplikaci nebo procesu. Nástroj Využití procesoru můžete spustit na verzích pro vydání nebo ladění. Další informace najdete v tématu Použití nástrojů profilace ve verzích pro uvolnění nebo ladění.

Následující pokyny ukazují, jak používat nástroj Využití procesoru bez ladicího programu pomocí profileru výkonu sady Visual Studio. V příkladech se používá sestavení vydané verze na místním počítači. Buildy vydaných verzí poskytují nejlepší přehled o skutečném výkonu aplikace. Kurz, který ukazuje, jak zlepšit výkon pomocí nástroje Využití procesoru, najdete v případové studii: Průvodce začátečníkem pro optimalizaci kódu.

Místní počítač obvykle nejlépe replikuje nainstalované spuštění aplikace. Pokud chcete shromažďovat data ze vzdáleného zařízení, spusťte aplikaci přímo na zařízení, ne přes připojení ke vzdálené ploše.

Shromažďování dat o využití procesoru

  1. V projektu sady Visual Studio nastavte konfiguraci řešení na Release a jako cíl nasazení vyberte Místní ladicí program systému Windows (nebo Místní počítač).

    Snímek obrazovky, který ukazuje možnost Vybrat verzi a místní počítač.

    snímek obrazovky, který ukazuje výběr

  2. Vyberte ladění>profileru výkonu.

  3. V části Dostupné nástrojevyberte Využití CPUa pak vyberte Spustit.

    snímek obrazovky, který ukazuje

    snímek obrazovky, který ukazuje

    Pokud povolíte možnost Začít s kolekcí pozastavenou před spuštěním profileru, nebudou se data shromažďovat, dokud v zobrazení diagnostické relace nevyberete tlačítko Záznam.

    Poznámka

    Další informace o tom, jak nástroj zefektivnit, najdete v tématu Optimalizace nastavení profileru.

  4. Po spuštění aplikace se zahájí diagnostická relace a zobrazí data o využití procesoru. Až shromažďování dat dokončíte, vyberte Zastavit shromažďování.

    snímek obrazovky, který ukazuje zastavení shromažďování dat o využití procesoru

    snímek obrazovky, který ukazuje zastavení shromažďování dat o využití procesoru

    Nástroj Využití procesoru analyzuje data a zobrazí zprávu. Pokud máte potíže se shromažďováním nebo zobrazováním dat, přečtěte si téma Řešení chyb profilace a oprava problémů.

    snímek obrazovky znázorňující sestavu využití procesoru

    snímek obrazovky znázorňující sestavu využití procesoru

    Pomocí rozevíracího seznamu Filtr vyberte nebo zrušte výběr vláken, která chcete zobrazit, a pomocí vyhledávacího pole vyhledejte konkrétní vlákno nebo uzel.

Sloupce dat využití procesoru

Jméno Popis
Celkový CPU [jednotka, %] celkem rovnice dat %

Milisekundy výpočetní doby procesoru a procento využití procesoru používané voláním funkce a funkcemi volanými touto funkcí ve vybraném časovém rozsahu. Liší se od grafu časové osy využití procesoru , který porovnává celkovou činnost procesoru v časovém rozsahu s celkovým dostupným výkonem procesoru.
vlastní CPU [jednotka, %] Self % rovnice

Milisekundy výpočetní doby procesoru a procentní využití procesoru voláním funkce v zadaném časovém rozsahu, kromě funkcí, které jsou volány touto funkcí.
modulu V některých zobrazeních se zobrazí sloupec Modul, který zobrazuje název modulu obsahujícího funkci.

Analýza přehledů procesoru

Pokud se v části Top Insights zobrazí nějaké přehledy, získejte další informace o zjištěném problému pomocí poskytnutého odkazu. Kromě toho, pokud používáte Copilot, tlačítko Ask Copilot otevře okno chatu Copilot a Copilot nabídne návrhy na základě vašeho kódu a všech zjištěných problémů.

Další informace naleznete v přehledech procesoru .

Analýza využití procesoru

Pokud chcete analyzovat sestavu využití procesoru, klikněte na Otevřít podrobnostinebo kliknutím na některou z hlavních funkcí otevřete zobrazení Functions.

Sestava poskytuje různá zobrazení diagnostických dat:

Zobrazit Popis
Volající/volaný Podrobné zobrazení času procesoru pro konkrétní funkci, funkce, které ji volaly, a funkce, které ona volá. Údaje o výkonu se agregují pro období shromažďování dat. Můžete vybrat volající funkce a volané funkce pro procházení volací cesty.
Strom volání Hierarchické zobrazení cesty volání funkce Používá se k identifikaci cest volání, které zabírají nejvíce času procesoru (horká cesta).
Moduly Zobrazení času procesoru stráveného v jednotlivých modulech agregované v průběhu období shromažďování dat Používá se k identifikaci modulů, které můžou být kritickými body výkonu kvůli kombinaci vysokého počtu volání nebo problémů s výkonem.
Funkce Zobrazení času procesoru stráveného v jednotlivých funkcích agregované v průběhu období shromažďování dat. Používá se k identifikaci funkcí, které můžou být kritickými body výkonu kvůli kombinaci vysokého počtu volání nebo problémů s výkonem.
Graf plamene Hierarchické zobrazení cesty volání funkce ve vizualizaci grafu plamene Používá se k identifikaci cest volání, které zabírají nejvíce času procesoru (horká cesta).

Pokud chcete sestavu analyzovat, klikněte na Vytvořit podrobnou sestavu.

Sestava poskytuje různá zobrazení diagnostických dat:

  • Volající/volaný
  • Strom volání

Ve všech zobrazeních kromě volající-volaný je diagnostická zpráva seřazena podle celkového zatížení procesoru, od nejvyššího k nejnižšímu. Změňte pořadí řazení nebo sloupec řazení výběrem záhlaví sloupců. Poklikejte na funkci, kterou vás zajímá, a zobrazí se zdroj funkce a také zvýraznění, které ukazuje, kde je čas strávený v této funkci. Tabulka zobrazuje sloupce s daty, jako je čas strávený ve funkci, včetně volaných funkcí (Celkové CPU), a druhý sloupec, který zobrazuje čas strávený ve funkci bez volaných funkcí (Self CPU).

Tato data vám můžou pomoct vyhodnotit, jestli je samotná funkce kritickým bodem výkonu. Určete, kolik dat metoda zobrazuje, abyste zjistili, zda jsou kód třetí strany nebo knihovny modulu runtime důvodem pro pomalé fungování nebo vysokou spotřebu zdrojů vašich koncových bodů.

Další informace o použití grafu Plamen naleznete v tématu Identifikace horkých cest pomocí Flame Graph.

Strom volání využití procesoru

Pokud chcete zobrazit strom volání, vyberte nadřazený uzel v sestavě. Ve výchozím nastavení se stránka Využití procesoru otevře v zobrazení Volající/Volaný. V rozevíracím seznamu Aktuální zobrazení vyberte Strom volání.

Můžete kliknout na tlačítka Rozbalit horkou cestu a Zobrazit horkou cestu, abyste viděli volání funkcí, která využívají nejvyšší procento CPU ve stromovém zobrazení volání.

Struktura stromu volání

snímek obrazovky znázorňující strukturu stromu volání

snímek obrazovky znázorňující strukturu stromu volání

Obraz Popis
krok 1 Uzel nejvyšší úrovně ve stromu volání Využití procesoru představující aplikaci.
krok 2 Ve většině aplikací, když je možnost Zobrazit externí kód zakázána, uzlem druhé úrovně je uzel [Externí kód]. Uzel obsahuje kód systému a architektury, který spustí a zastaví aplikaci, nakreslí uživatelské rozhraní, řídí plánování vláken a poskytuje aplikaci další služby nízké úrovně.
krok 3 Podřízené položky uzlu druhé úrovně jsou metody uživatelského kódu a asynchronní rutiny, které jsou volány nebo vytvořeny systémem a kódem architektury druhé úrovně.
krok 4 Podřízené uzly metody mají data pouze pro volání nadřazené metody. Když je zobrazení externího kódu zakázáno, mohou metody aplikace obsahovat také uzel [Externí kód].

Externí kód

Systémové a frameworkové funkce, které spouští váš kód, se nazývají externí kód. Funkce externího kódu spouštějí a zastavují aplikaci, vykreslují uživatelské rozhraní, řídí vlákna a poskytují aplikaci další služby nízké úrovně. Ve většině případů vás externí kód nezajímá, takže strom volání využití procesoru shromažďuje externí funkce metody uživatele do jednoho [Externí volání] uzlu.

Chcete-li zobrazit cesty volání externího kódu, na hlavní stránce souhrnu sestavy (pravé podokno) zrušte výběr Zobrazit pouze můj kód v rozevíracím seznamu Nastavení a poté zvolte Použít. (Rozevírací seznam nastavení nastavení je k dispozici na hlavní stránce souhrnu sestavy, nikoli na podrobných zobrazeních.)

Snímek obrazovky, který zobrazuje Nastavení a pak Zobrazit jenom můj kód

Systémové a frameworkové funkce, které spouští váš kód, se nazývají externí kód. Funkce externího kódu spouštějí a zastavují aplikaci, vykreslují uživatelské rozhraní, řídí vlákna a poskytují aplikaci další služby nízké úrovně. Ve většině případů vás externí kód nezajímá, takže strom volání využití procesoru shromažďuje externí funkce metody uživatele do jednoho [externí kód] uzlu.

Chcete-li zobrazit cesty volání externího kódu, na hlavní stránce zprávy o diagnostice (v pravém podokně) vyberte Zobrazit externí kód v rozbalovacím seznamu Filtr a poté vyberte Použít. Zobrazení stromu volání na stránce využití procesoru rozbalí volání externího kódu. (Rozbalovací nabídka filtru je k dispozici na hlavní diagnostické stránce, nikoli na podrobných zobrazeních.)

cs-CZ: snímek obrazovky, který ukazuje zobrazení externího kódu

Když zakážete Zobrazit jen můj kód, zobrazení stromu volání na stránce Využití CPU rozšíří volání externího kódu.

Mnoho řetězců volání externího kódu je hluboce vnořeno, takže šířka řetězce může překročit šířku zobrazení sloupce Název funkce. Názvy funkcí se pak zobrazí, jak je znázorněno na následujícím obrázku.

Snímek obrazovky zobrazující vnořený externí kód ve stromu volání

Mnoho řetězců volání externího kódu je hluboce vnořeno, takže šířka řetězce může překročit šířku zobrazení sloupce Název funkce. Názvy funkcí se pak zobrazí jako ....

Snímek obrazovky zobrazující vnořený externí kód ve stromu volání

Pokud chcete najít název funkce, který hledáte, použijte vyhledávací pole. Najeďte myší na vybranou čáru nebo pomocí vodorovného posuvníku zobrazte data.

Snímek obrazovky, který zobrazuje hledání vnořeného externího kódu

Snímek obrazovky, který zobrazuje hledání vnořeného externího kódu

Asynchronní funkce ve stromu volání při využití CPU

Když kompilátor narazí na asynchronní metodu, vytvoří skrytou třídu pro řízení provádění metody. Třída je koncepčně stavový počítač. Třída má funkce generované kompilátorem, které asynchronně volají původní metody, a zpětná volání, plánovač a iterátory potřebné ke spuštění. Když nadřazená metoda volá původní metodu, kompilátor odebere metodu z kontextu spuštění nadřazeného objektu a spustí skryté metody třídy v kontextu systémového a framework kódu, který řídí provádění aplikace. Asynchronní metody jsou často, ale ne vždy spuštěny na jednom nebo více různých vláknech. Tento kód se zobrazí v využití procesoru volání stromu jako podřízené položky [externí kód] uzlu bezprostředně pod horním uzlem stromu.

V následujícím příkladu jsou první dva uzly pod [externím kódem] kompilátorem generované metody třídy stavového počítače. Třetí uzel je voláním původní metody.

Snímek obrazovky, který ukazuje asynchronní uzel.

Rozbalte vygenerované metody, abyste zobrazili, co se děje:

Snímek obrazovky s rozbaleným asynchronním uzlem.

Snímek obrazovky s rozbaleným asynchronním uzlem.

  • MainPage::GetMaxNumberAsyncButton_Click jenom spravuje seznam hodnot úkolů, vypočítá maximální počet výsledků a zobrazí výstup.

  • MainPage+<GetMaxNumberAsyncButton_Click>d__3::MoveNext ukazuje aktivitu potřebnou k naplánování a spuštění 48 úkolů, které zahrnují volání GetNumberAsync.

  • MainPage::<GetNumberAsync>b__b zobrazuje aktivitu úkolů, které volají GetNumber.

Shromažďování počtu volání (.NET)

Pokud chcete zobrazit počty volání v zobrazení Funkce, můžete toto nastavení povolit před spuštěním profileru. Toto nastavení je podporováno pro typy projektů .NET a vyžaduje spuštění procesu v profileru. Scénář připojení není podporován.

  1. V profileru výkonu vyberte ikonu Nastavení pro využití procesoru.

    snímek obrazovky s ikonou nastavení využití procesoru

  2. Povolte možnost Shromažďovat počty volání (.NET pouze).

    snímek obrazovky znázorňující nastavení využití procesoru

  3. Shromážděte data o využití procesoru.

  4. Otevřete zobrazení Funkce a ujistěte se, že je sloupec Počet volání nastaven tak, aby byl viditelný.

    Pokud sloupec nevidíte, klikněte pravým tlačítkem myši na záhlaví sloupce a zvolte viditelné sloupce.

    Snímek obrazovky zobrazící data počtu volání