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 výkonu využití procesoru zobrazuje čas procesoru a procento strávené prováděním kódu v jazyce C++, C#/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. Nástroj poskytuje automatické přehledy a různá zobrazení vašich dat, abyste mohli analyzovat a diagnostikovat problémy s výkonem.

  • Identifikujte problémy s výkonem ve scénářích DevOps, například když zákazník hlásí, že se některé požadavky nebo objednávky během špičky nedostávají na prodejní web. Problémy jsou často v produkčním prostředí a v tuto chvíli je náročné 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ů.

  • 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ý pro relace místního trasování i produkční prostředí. Nástroj Využití procesoru je možné zahájit také pomocí klávesové zkratky, Alt+F2 a následným výběrem využití procesoru nebo otevřením již shromážděného trasování pomocí nástroje, jako je 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ůže běžet na otevřeném projektu sady Visual Studio, v nainstalované aplikaci Microsoft Store nebo připojené ke spuštěné aplikaci nebo procesu. Nástroj Využití procesoru můžete spustit s laděním nebo bez ladění. Další informace naleznete v tématu Spuštění nástrojů profilace s ladicím programem nebo bez něj.

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říručce začátečníka k 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 vzdálenou plochu Připojení.

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

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

    Snímek obrazovky znázorňující výběr verze a místního počítače

    Snímek obrazovky znázorňující výběr verze a místního počítače

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

  3. V části Dostupné nástroje vyberte Využití procesoru a pak vyberte Spustit.

    Snímek obrazovky znázorňující výběr využití procesoru

    Snímek obrazovky znázorňující výběr využití procesoru

    Pokud před spuštěním profileru povolíte možnost Začít s pozastavenou kolekcí, 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 znázorňující shromažďování dat o zastavení využití procesoru

    Snímek obrazovky znázorňující shromažďování dat o zastavení využití procesoru

    Nástroj Využití procesoru analyzuje data a zobrazí sestavu. 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 řešení 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

Název Popis
Celkový procesor [jednotka, %] Total % data equation

Procento milisekund a procesoru používané voláními funkce a funkce volané funkcí ve vybraném časovém rozsahu. Liší se od grafu časové osy využití procesoru, který porovnává celkovou aktivitu procesoru v časovém rozsahu s celkovým dostupným procesorem.
Self CPU [jednotka, %] Rovnice s vlastním procentem

Procento milisekund a procesoru používané voláními funkce ve vybraném časovém rozsahu, s výjimkou funkcí volanou funkcí.
Modul 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 chcete analyzovat nejdůležitější přehledy, hlavní funkce a horká cesta, podívejte se na přehledy procesoru.

Analýza využití procesoru

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

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

  • Volající nebo volaný
  • Strom volání
  • Moduly
  • Functions
  • Graf plamene

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

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

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

Ve všech zobrazeních s výjimkou volajícího nebo volaného se diagnostická sestava seřadí podle celkového využití procesoru od nejvyššího po nejnižší. 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ě nazývaných funkce (celkový procesor) a druhý sloupec, který zobrazuje čas strávený ve funkci s výjimkou funkcí (self CPU).

Tato data vám můžou pomoct vyhodnotit, jestli je samotná funkce kritickým bodem výkonu. Určete, kolik dat se metoda zobrazuje, jestli jsou příčinou pomalého využití koncových bodů kód nebo knihovny modulu runtime jiného výrobce.

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í nebo Volaný . V rozevíracím seznamu Aktuální zobrazení vyberte Strom volání.

Kliknutím na tlačítko Rozbalit horkou cestu a Zobrazit horkou cestu zobrazíte volání funkce, která používají nejvyšší procento procesoru v zobrazení stromu 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í

Image Popis
Krok 1 Uzel nejvyšší úrovně ve stromech volání využití procesoru je pseudouzlu.
Krok 2 Ve většině aplikací platí, že když je možnost Zobrazit externí kód zakázaná, uzel 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 Uzlu druhé úrovně jsou podřízeny metody uživatelského kódu a asynchronní rutiny, které volá nebo vytváří systémový kód a kód architektury druhé úrovně.
Krok 4 Podřízené uzly metody mají data pouze pro volání nadřazené metody. Pokud zakážete Zobrazit externí kód, 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, nakreslete uživatelské rozhraní, řídí vlákno 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 uzlu [Externí kód].

Chcete-li zobrazit cesty volání externího kódu, přepněte aktuální zobrazení do zobrazení Stromu volání nebo klikněte pravým tlačítkem myši a vyberte Zobrazit ve stromu volání.

Snímek obrazovky znázorňující zobrazení ve stromu volání

Pokud chcete zobrazit cesty volání externího kódu, vyberte na hlavní stránce diagnostické sestavy (pravé podokno) možnost Zobrazit externí kód z rozevíracího seznamu Filtr a pak vyberte Použít. Zobrazení stromuvolání na stránce Využití procesoru pak rozbalí volání externího kódu. (Rozevírací seznam filtru je k dispozici na hlavní stránce diagnostiky, nikoli na podrobných zobrazeních.)

Snímek obrazovky znázorňující zobrazení externího kódu

Mnoho řetězů volání externího kódu je hluboko 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 znázorňující vnořený externí kód ve stromu volání

Mnoho řetězů volání externího kódu je hluboko 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 znázorňují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 znázorňující hledání vnořeného externího kódu

Snímek obrazovky znázorňující hledání vnořeného externího kódu

Asynchronní funkce ve stromu volání využití procesoru

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í ve stromu volání Využití procesoru jako podřízené položky uzlu [Externí kód] bezprostředně pod horním uzlem stromu.

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

Snímek obrazovky znázorňující asynchronní uzel

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

Snímek obrazovky znázorňující rozbalený asynchronní uzel

Snímek obrazovky znázorňující rozbalený asynchronní uzel

  • MainPage::GetMaxNumberAsyncButton_Click stačí spravovat seznam hodnot úkolů, vypočítá maximum výsledků a zobrazí výstup.

  • MainPage+<GetMaxNumberAsyncButton_Click>d__3::MoveNext zobrazuje aktivitu potřebnou k naplánování a spuštění 48 úkolů, které zabalí 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 znázorňující ikonu nastavení využití procesoru

  2. Povolte možnost Shromáždit počty volání (pouze .NET).

    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 znázorňující data počtu volání