Analýza využití procesoru bez ladění v profileru výkonu
Dobrým způsobem, jak začít prozkoumat problémy s výkonem ve vaší aplikaci, je pochopit využití CPU. nástroj výkon využití cpu zobrazuje čas procesoru a procento strávené prováděním kódu v aplikacích C++, C#/Visual Basic a javascriptu.
nástroj využití CPU může běžet v otevřeném projektu Visual Studio, v nainstalované aplikaci Microsoft Store nebo připojený ke spuštěné aplikaci nebo procesu. Nástroj využití CPU můžete spustit s laděním nebo bez něj. Další informace najdete v tématu spuštění nástrojů pro profilaci pomocí ladicího programu nebo bez něj.
následující pokyny ukazují, jak používat nástroj využití CPU bez ladicího programu, pomocí Visual Studioho profileru výkonu. V příkladech se používá sestavení pro vydání na místním počítači. Sestavení vydaných verzí poskytují nejlepší pohled na skutečný výkon aplikace. Analýza využití procesoru pomocí ladicích sestavení (připojeného ladicího programu) najdete v tématu Příručka pro začátečníky k profilaci výkonu.
Obvykle místní počítač nejlépe replikuje nainstalovaná 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.
Poznámka
k použití profileru výkonuse vyžaduje Windows 7 nebo novější.
Shromažďovat data o využití procesoru
v projektu Visual Studio nastavte konfiguraci řešení na Release a jako cíl nasazení vyberte místní Windows ladicí program (nebo místní počítač).

Vyberte ladit > výkon profileru.
V části dostupné nástroje vyberte využití CPU a pak vyberte Spustit.

Po spuštění aplikace se v relaci diagnostiky spustí a zobrazí data o využití procesoru. Až budete hotovi s shromažďováním dat, vyberte Zastavit shromažďování.

Nástroj využití CPU analyzuje data a zobrazí sestavu.

Analýza sestavy využití CPU
Diagnostická sestava je seřazená podle celkového využití CPU od nejvyšších po nejnižší. Výběrem záhlaví sloupců změňte pořadí řazení nebo sloupec řazení. Pomocí rozevíracího seznamu Filtr vyberte nebo zrušte výběr zobrazovaného vlákna a pomocí vyhledávacího pole vyhledejte konkrétní vlákno nebo uzel.
počínaje Visual Studio 2019 můžete kliknout na tlačítko rozbalit cestu k hotu a zobrazit kritickou cestu a zobrazit tak volání funkcí, která používají nejvyšší procento CPU v zobrazení stromu volání.
Sloupce dat využití procesoru
| Název | Description |
|---|---|
| Celkový čas procesoru [jednotka,%] | ![]() Hodnoty milisekund a CPU používané voláním funkce a funkce volané funkcí ve vybraném časovém rozsahu. To se liší od grafu časová osa využití procesoru , který porovnává celkovou dostupnou CPU v časovém rozsahu s celkovým DOSTUPNÝm procesorem. |
| Samotný procesor [jednotka,%] | ![]() Hodnoty milisekund a CPU využívané voláním funkce ve vybraném časovém rozsahu s výjimkou funkcí volaných funkcí. |
| Modul | Název modulu, který obsahuje funkci. |
Strom volání využití CPU
Chcete-li zobrazit strom volání, vyberte v sestavě nadřazený uzel. Stránka využití CPU se otevře v zobrazení volající/volaný . V rozevíracím seznamu aktuální zobrazení vyberte možnost strom volání.
Stromová struktura volání


| Image | Description |
|---|---|
![]() |
Uzel nejvyšší úrovně ve stromech volání využití CPU je pseudo uzel. |
![]() |
Pokud je v aplikaci většina aplikací zakázaná možnost Zobrazit externí kód , je uzel druhé úrovně uzlem [externí kód] . Uzel obsahuje kód systému a rozhraní, který spustí a zastaví aplikaci, nakreslí uživatelské rozhraní, řídí plánování vláken a poskytuje aplikaci další služby nižší ú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
Funkce systému a rozhraní, které jsou spouštěny vaším kódem, se nazývají externí kód. Funkce externího kódu spouštějí a zastavují aplikaci, nakreslí uživatelské rozhraní, řídí vlákna a poskytují do aplikace další služby nižší úrovně. Ve většině případů nebudete mít zájem o externí kód, takže strom volání využití CPU shromáždí externí funkce uživatelské metody do jednoho uzlu [externí kód] .
Chcete-li zobrazit cesty volání externího kódu, na hlavní stránce diagnostické sestavy (pravé podokno) vyberte možnost Zobrazit externí kód v rozevíracím seznamu filtru a pak vyberte použít. Zobrazení stromové struktury volání stránky využití CPU pak rozbalí volání externího kódu. (Rozevírací seznam Filtr je k dispozici na hlavní stránce diagnostiky, nikoli v podrobných zobrazeních.)

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

Pokud chcete najít název funkce, kterou hledáte, použijte vyhledávací pole. Najeďte myší na vybraný řádek nebo k zobrazení dat použijte vodorovný posuvník.


Asynchronní funkce ve stromu volání využití CPU
Když kompilátor narazí na asynchronní metodu, vytvoří skrytou třídu pro řízení provádění metody. V koncepční úrovni je třída Stavový počítač. Třída obsahuje funkce generované kompilátorem, které asynchronně volají původní metody a zpětná volání, Scheduler 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é třídy v kontextu systému a kódu rozhraní, který řídí provádění aplikace. Asynchronní metody jsou často, ale ne vždy, spouštěny v jednom nebo více různých vláknech. Tento kód se zobrazí ve stromu volání využití CPU jako podřízené objekty v uzlu [External Code] bezprostředně pod horním uzlem stromu.
V následujícím příkladu jsou první dva uzly v [External Code] metody generované kompilátorem třídy stavového stroje. Třetí uzel je volání původní metody.

Rozbalte vygenerované metody, aby se zobrazily informace o tom, co se prochází:

MainPage::GetMaxNumberAsyncButton_Clickpouze spravuje seznam hodnot úkolů, vypočítá maximum výsledků a zobrazí výstup.MainPage+<GetMaxNumberAsyncButton_Click>d__3::MoveNextzobrazuje aktivitu nutnou k naplánování a spuštění úloh 48, které zabalí voláníGetNumberAsync.MainPage::<GetNumberAsync>b__bzobrazuje aktivitu úkolů, které volajíGetNumber.





