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 využití procesoru sady Visual Studio zobrazuje dobu aktivního výpočtu 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. 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 může například pomoct, když zákazník hlásí, že některé požadavky nebo objednávky nedostávají na maloobchodní web během špičky. 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ů.
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ý pro relace místního trasování i 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, 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ůž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 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řípadové studii: Příručka 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 připojení ke vzdálené ploše.
Shromažďování dat o využití procesoru
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č).
Vyberte Profiler výkonu ladění>.
V části Dostupné nástroje vyberte Využití procesoru a pak vyberte Spustit.
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.
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í.
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ů.
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, %] | Milisekundy výpočetní doby procesoru a procento procesoru používané voláním 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, %] | Milisekundy výpočetní doby procesoru a procento procesoru používané voláním funkce ve vybraném časovém rozsahu, s výjimkou funkcí volaných 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 se v části Top Insights zobrazí nějaké přehledy , pomocí uvedeného odkazu získáte další informace o zjištěném problému. Kromě toho, pokud používáte Copilot, otevře se tlačítko Ask Copilot 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 najdete v tématu 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
- Funkce
- 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í
Image | Popis |
---|---|
Uzel nejvyšší úrovně ve stromu volání Využití procesoru představující aplikaci. | |
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ě. | |
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ě. | |
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í volání].
Chcete-li zobrazit cesty volání externího kódu, na hlavní stránce souhrnu sestavy (pravé podokno) zrušte výběr možnosti Zobrazit pouze můj kód z rozevíracího seznamu Nastavení a pak vyberte Použít. (Rozevírací seznam Nastavení je k dispozici na hlavní stránce souhrnu sestavy, nikoli na podrobných zobrazeních.)
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].
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í stromu volá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.)
Když funkci Show Just My Code zakážete, rozbalí zobrazení stromu volání na stránce Využití procesoru 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í, jak je znázorněno na následujícím obrázku.
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 ....
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.
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.
Rozbalte vygenerované metody, abyste zobrazili, co se děje:
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.
V profileru výkonu vyberte ikonu Nastavení využití procesoru.
Povolte možnost Shromáždit počty volání (pouze .NET).
Shromážděte data o využití procesoru.
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.