Měření výkonu aplikace analýzou využití procesoru (C#, Visual Basic, C++, F#)

Při ladění pomocí diagnostického nástroje využití procesoru integrovaného ladicího programu najdete problémy s výkonem . Můžete také analyzovat využití procesoru bez připojeného ladicího programu nebo cílením na spuštěnou aplikaci. Další informace naleznete v tématu Spuštění nástrojů profilace s ladicím programem nebo bez něj.

Když se ladicí program pozastaví, nástroj Využití procesoru v okně Diagnostické nástroje shromažďuje informace o funkcích spuštěných ve vaší aplikaci. Nástroj zobrazí seznam funkcí, které pracovaly, a nabídce graf s časovou osou, který můžete použít k podrobnému řešení konkrétních úseků vzorkovací relace.

Důležité

Diagnostické nástroje integrované v ladicím programu jsou podporovány pro vývoj v .NET v sadě Visual Studio, včetně ASP.NET, ASP.NET Core a nativního vývoje v jazyce C++. Je vyžadována odpovídající úloha sady Visual Studio. Systém Windows 8 a novější se vyžaduje ke spuštění nástrojů profilace pomocí ladicího programu (okno Diagnostické nástroje ).

V tomto kurzu:

  • Shromažďovat data o využití procesoru
  • Analyzovat data o využití procesoru

Pokud využití procesoru neposkytuje data, která potřebujete, další nástroje profilace v profileru výkonu poskytují různé druhy informací, které by pro vás mohly být užitečné. V řadě případů může být kritickým bodem aplikace něco jiného než procesor, třeba paměť, vykreslování uživatelského rozhraní nebo dlouhá odezva síťového požadavku.

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

  1. Otevřete projekt, který chcete v sadě Visual Studio ladit, a nastavte v aplikaci zarážku do bodu, kde chcete prověřit využití procesoru.

  2. Druhou zarážku nastavte na konec funkce nebo oblasti kódu, kterou chcete analyzovat.

    Nastavením dvou zarážek omezíte shromažďování dat jenom na analyzovanou část kódu.

  3. Okno Diagnostické nástroje se zobrazí automaticky (pokud jste ho nevypnuli). Chcete-li znovu zobrazit okno, klepněte na tlačítko Ladění>systému Windows>Zobrazit diagnostické nástroje.

  4. Na panelu nástrojů v nastavení Vybrat nástroje můžete vybrat, jestli chcete zobrazit Využití procesoru, Využití paměti nebo obojí. Pokud používáte Visual Studio Enterprise, můžete také povolit nebo zakázat IntelliTrace v nástrojích>Možnosti>IntelliTrace.

    Screenshot that shows Diagnostics Tools.

    Screenshot that shows Diagnostics Tools.

    Zaměříme se hlavně na využití procesoru. Zkontrolujte, že je zapnuté Využití procesoru (je zapnuté automaticky).

  5. Klepněte na tlačítko Spustit>ladění ladění (nebo Spustit na panelu nástrojů nebo F5).

    Jakmile se aplikace načte, zobrazí se souhrnný přehled diagnostických nástrojů. Pokud potřebujete otevřít okno, klikněte na Ladit>windows>Zobrazit diagnostické nástroje.

    Screenshot that shows Diagnostics Tools Summary Tab.

    Screenshot that shows Diagnostics Tools Summary Tab.

    Další informace o událostech naleznete v části Hledání a filtrování na kartě Události v okně Diagnostické nástroje.

  6. Spusťte scénář, který se zastaví u první zarážky.

  7. Jakmile se ladicí program pozastaví, zapněte shromažďování dat o využití procesoru a pak otevřete kartu Využití procesoru.

    Screenshot that shows Diagnostics Tools enable CPU profiling.

    Screenshot that shows Diagnostics Tools enable CPU profiling.

    Když zvolíte Zaznamenat profil CPU, Visual Studio začne nahrávat funkce a zjistí dobu potřebnou k jejich provedení. Shromážděná data můžete zobrazit, jen když se aplikace zastaví na zarážce.

  8. Stiskněte klávesu F5, kterou spustíte aplikaci až ke druhé zarážce.

    Teď máte údaje o výkonu aplikace přesně pro oblast kódu spuštěnou mezi dvěma zarážkami.

    Profiler začne připravovat údaje o vlákně. Počkejte, až skončí.

    Screenshot that shows Diagnostics Tools preparing threads.

    Screenshot that shows Diagnostics Tools preparing threads.

    V nástroji Využití procesoru se na kartě Využití procesoru zobrazí sestava.

    Screenshot that shows Diagnostics Tools CPU Usage Tab.

    Screenshot that shows Diagnostics Tools CPU Usage Tab.

  9. Pokud chcete vybrat konkrétnější oblast kódu, kterou chcete analyzovat, vyberte oblast na časové ose procesoru (musí to být oblast, která zobrazuje data profilace).

    Screenshot that shows Diagnostics Tools selecting a time segment.

    Screenshot that shows Diagnostics Tools selecting a time segment.

    Teď můžete začít analyzovat data. 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ů.

    Tip

    Při pokusu o identifikaci problémů s výkonem proveďte několik měření. Výkon se přirozeně liší od spuštění po spuštění a cesty kódu se obvykle spouští pomaleji při prvním spuštění kvůli jednorázové inicializační práci, jako je načítání knihoven DLL, kompilování metod JIT a inicializace mezipamětí. Když vezmete více měření, získáte lepší představu o rozsahu a mediánu zobrazené metriky, což vám umožní porovnat první a stabilní výkon oblasti kódu.

Krok 2: Analýza dat o využití procesoru

Analýzu dat doporučujeme začít tím, že zkontrolujete seznam funkcí na kartě Využití procesoru. Zjistěte nejaktivnější funkce a pak se na každou z nich podívejte podrobněji.

  1. V seznamu funkcí se podívejte, jaké funkce vykonávají většinu práce.

    Screenshot that shows Diagnostics Tools CPU Usage Function List.

    Screenshot that shows Diagnostics Tools CPU Usage Function List.

    Tip

    Funkce jsou seřazené od nejvíce pracujících po nejméně pracující (nejsou seřazené podle pořadí, v jakém byly volány). Pomůže vám to rychle identifikovat funkce, které běží nejdéle.

  2. V seznamu funkcí poklikejte na některou funkci aplikace, která pracuje nejvíce.

    Když dvakrát kliknete na funkci, otevře se v levém podokně zobrazení Funkce . V rozevírací nabídce vyberte zobrazení Volající nebo Volaný .

    Screenshot that shows Diagnostics Tools Caller Callee View.

    V tomto zobrazení se vybraná funkce zobrazí v záhlaví a v poli Aktuální funkce (DoWork, v tomto příkladu). Funkce, která volala aktuální funkci, se zobrazí vlevo pod voláním funkcí a všechny funkce volané aktuální funkcí se zobrazí v poli Volané funkce vpravo. (Pokud chcete aktuální funkci změnit, vyberte libovolné pole.)

    V tomto zobrazení vidíte celkový čas (ms) a procento z celkové doby spuštění aplikace, kterou funkce potřebovala k dokončení. Tělo funkce také zobrazuje celkovou dobu (a procento času) spotřebovanou tělem funkce, ale bez doby spotřebované volajícími a volanými funkcemi.

    Když na ni poklikáte, otevře se v levém podokně zobrazení Volající/volaný.

    Screenshot that shows Diagnostics Tools Caller Callee View.

    V tomto zobrazení se vybraná funkce zobrazí v záhlaví i v poli Aktuální funkce (v tomto příkladu je to GetNumber). Funkce, která volala aktuální funkci, se zobrazí vlevo pod voláním funkcí a všechny funkce volané aktuální funkcí se zobrazí v poli Volané funkce vpravo. (Pokud chcete aktuální funkci změnit, vyberte libovolné pole.)

    V tomto zobrazení vidíte celkový čas (ms) a procento z celkové doby spuštění aplikace, kterou funkce potřebovala k dokončení. Tělo funkce také zobrazuje celkovou dobu (a procento času) spotřebovanou tělem funkce, ale bez doby spotřebované volajícími a volanými funkcemi. (V tomto příkladu bylo v těle funkce vynaloženo 2367 z 2389 ms a zbývajících 22 ms bylo vynaloženo v externím kódu volaného touto funkcí).

    Tip

    Vysoké hodnoty v těle funkce pravděpodobně znamenají kritické místo výkonu samotné funkce.

  3. Pokud chcete zobrazit zobrazení vyšší úrovně zobrazující pořadí volání funkcí, vyberte v rozevíracím seznamu v horní části podokna strom volání.

    Každé číslo na následujícím obrázku se týká některého kroku v postupu.

    Diagnostics Tools Call Tree

    Image Popis
    Step 1 Nejvyšší uzel ve stromech volání Využití procesoru je fiktivní.
    Step 2 Ve většině aplikací, ve kterých zakážete možnost Zobrazit externí kód, je v druhé úrovni uzel [Externí kód], který obsahuje systémový kód a kód architektury, který spouští a zastavuje aplikaci, vykresluje uživatelské rozhraní, řídí plánování podprocesů a na nejnižší úrovni zajišťuje pro aplikaci další služby.
    Step 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ě.
    Step 4 Podřízené uzly metody obsahují jenom data pro volání nadřízené metody. Pokud zakážete Zobrazit externí kód, mohou metody aplikace obsahovat také uzel [Externí kód].

    Další informace k hodnotám ve sloupcích:

    • Celkový čas procesoru: Kolik práce vykonala funkce spolu se všemi dalšími funkcemi, které volala. Vysoké hodnoty znamenají, že tyto funkce patří k těm nejnáročnějším.

    • Vlastní čas procesoru: Kolik práce vykonal kód v těle funkce po odečtení práce vykonané volanými funkcemi. Vysoké hodnoty vlastního času procesoru pravděpodobně odpovídají kritickému místu ve funkci.

    • Moduly: Název modulu, který funkci obsahuje, nebo počet modulů obsahujících funkce v uzlu [Externí kód].

    Chcete-li zobrazit volání funkce, která používají nejvyšší procento procesoru v zobrazení stromu volání, klepněte na tlačítko Rozbalit horká cesta.

    Screenshot that shows Diagnostics Tools Hot Path.

    Poznámka:

    Pokud se ve stromu volání zobrazí kód označený jako "poškozený" kód nebo "neproměněný zásobník", znamená to, že události trasování událostí pro Windows (ETW) byly pravděpodobně vynechány. Zkuste znovu shromáždit stejné trasování a problém vyřešit.

Zobrazení externího kódu

Externím kódem se rozumí funkce systémových komponent a komponent architektury, které jsou spouštěné vámi napsaným kódem. Externí kód zahrnuje funkce, které spouštějí a zastavují aplikaci, vykreslují uživatelské rozhraní, řídí dělení na podprocesy a na nejnižší úrovni zajišťuje pro aplikaci další služby. Externí kód vás většinou nebude zajímat, a proto nástroj Využití procesoru shromažďuje externí funkce metody uživatele do jednoho uzlu [Externí kód].

Pokud se chcete podívat na cesty volání externího kódu, vyberte v seznamu filtru zobrazení možnost Zobrazit externí kód a pak zvolte Použít.

Screenshot that shows Choose Filter View, then Show External Code.

Myslete na to, že řetězy volání externího kódu je většinou hluboko vnořené, takže šířka sloupce Název funkce může na většině počítačových monitorů – s výjimkou těch největších – přesáhnout šířku zobrazení. V takovém případě se názvy funkcí zobrazují jako [...].

K nalezení hledaného uzlu použijte vyhledávací pole a pak použijte k zobrazení dat vodorovný posuvník.

Tip

Pokud profilujete externí kód, který volá funkce Systému Windows, měli byste se ujistit, že máte nejaktuálnější .soubory pdb . Bez těchto souborů se v zobrazeních sestav zobrazí seznam funkcí Windows, jejichž názvy jsou nesrozumitelné a obtížně pochopitelné. Další informace o tom, jak zajistit, abyste měli potřebné soubory, najdete v tématu Zadání symbolu (.pdb) a zdrojových souborů v ladicím programu.

Další kroky

V tomto kurzu jste se naučili shromažďovat data o využití procesoru a analyzovat je. Pokud jste už dokončili prohlídku profileru, možná si budete chtít přečíst o obecném přístupu k optimalizaci kódu pomocí nástrojů pro profilaci.

V tomto kurzu jste se naučili shromažďovat a analyzovat data o využití procesoru při ladění. Možná budete chtít zjistit další informace o profilaci buildů vydaných verzí pomocí profileru výkonu.