Plánování a měření výkonu aplikací

Uživatelé očekávají, že jejich aplikace zůstanou responzivní, budou cítit přirozeně a nebudou vyprázdnit baterii. Technicky vzato je výkon nefunkčním požadavkem, ale zacházení s výkonem jako funkcí pomáhá poskytovat očekávání uživatelů. Určete cíle a výsledky měření – to jsou klíčové faktory. Určete scénáře rozhodující z hlediska výkonu, definujte, co znamená dobrý výkon, a pak měřte včas a často v průběhu celého životního cyklu projektu, abyste si byli jisti, že svých cílů dosáhnete.

Určení cílů

Uživatelské prostředí představuje základní způsob definování dobrého výkonu. Čas spuštění aplikace může ovlivnit vnímání jeho výkonu uživatelem. Uživatel může považovat dobu spuštění aplikace kratší než jedna sekunda za vynikající, kratší než pět sekund za dobrou a delší než pět sekund za špatnou.

Jiné metriky mají méně zřetelný dopad na uživatelské prostředí, jako je paměť. Pravděpodobnost, že bude aplikace ukončena, když je pozastavená nebo neaktivní, roste s množstvím paměti, které aktivní aplikace používá. Vysoké využití paměti snižuje výkon pro všechny aplikace v systému, takže je rozumné mít cíl spotřeby paměti.

Nastavte počáteční cíle, které jsou specifické a měřitelné. Měly by se spadat do tří kategorií:

  • Doba – jak dlouho trvá dokončení úkolů uživatelům nebo aplikaci
  • Fluidita – rychlost a kontinuita, se kterou se aplikace překresluje v reakci na interakci uživatele
  • Efektivita – jak dobře aplikace šetří systémové prostředky, včetně napájení baterie

Time

Představte si přijatelné rozsahy uplynulého času (tříd interakce) pro uživatele, aby mohli dokončit své úkoly.

Třída interakce Vnímání uživatele Ideal Maximálně Examples
Rychlé Minimální znatelné zpoždění 100 ms 200 ms Vyvolání panelu aplikace; stiskněte tlačítko (první odpověď)
Typické Rychlé, ale ne rychlé 300 ms 500 ms Změnit velikost; sémantické přiblížení
Citlivý Není rychlé, ale cítí se responzivní 500 ms 1 sekunda Přejděte na jinou stránku; obnovení aplikace
Launch Konkurenční prostředí 1 sekunda 3 sekundy První spuštění aplikace
Nepřetržité Už se necítí responzivní 500 ms 5 sekund Stažení souboru z internetu
Vězeň Příliš dlouhé; uživatel by mohl přejít jinam 500 ms 10 sekund Instalace více aplikací ze Storu

Přiřaďte třídy interakce ke scénářům výkonu vaší aplikace. Pro každý scénář přiřaďte referenční informace k určitému bodu v čase aplikace, část uživatelského prostředí a třídu interakce.

Tekutost

Mezi konkrétní měřitelné cíle plynulosti vaší aplikace mohou patřit:

  • Bez překreslení obrazovky zarážky a starty (závady)
  • Animace se vykreslují s 60 snímky za sekundu (FPS)
  • Když uživatel posouvá zobrazení nebo roluje, aplikace zobrazuje 3–6 stránek obsahu za sekundu.

Efficiency

Mezi měřitelné cíle efektivity vaší aplikace můžou patřit:

  • Procento využití CPU vaší aplikace je po celou dobu na cílové hodnotě nebo pod ní a využití paměti v MB je rovněž po celou dobu na cílové hodnotě nebo pod ní.
  • Když je aplikace neaktivní, využití procesoru a paměti je minimální.
  • Vaši aplikaci lze aktivně používat po cílový počet hodin na baterii.

Návrh aplikace pro zvýšení výkonu

Pomocí cílů výkonu můžete ovlivnit návrh vaší aplikace. Vezměte v úvahu tyto aspekty:

Uživatelské rozhraní

  • Maximalizujte dobu analýzy a načítání a efektivitu paměti pro každou stránku optimalizací kódu XAML. Odložte načítání uživatelského rozhraní a kódu, dokud ho nepotřebujete.
  • Pro ListView a GridView nastavte všechny položky na stejnou velikost a použijte co nejvíce optimalizačních technik.
  • Deklarujte uživatelské rozhraní pomocí značkování namísto jeho imperativního vytváření v kódu.
  • Pozdržte vytváření prvků uživatelského rozhraní, dokud je uživatel nepotřebuje pomocí atributu x:Load .
  • Upřednostněte přechody motivů a animace před animacemi definovanými pomocí storyboardu. Animace založené na scénáři vyžadují neustálé překreslování obrazovky a udržují procesor i grafický vykreslovací řetězec aktivní.
  • Načítejte obrázky v takové velikosti, v jaké je zobrazujete.

Procesor, paměť a výkon

  • Naplánujte práci s nižší prioritou na vláknech s nižší prioritou. Viz Asynchronní programování a DispatcherQueue třída.
  • Minimalizujte nároky na paměť vaší aplikace uvolněním drahých prostředků (například médií), když je nepotřebujete.
  • Vyhněte se únikům paměti zrušením registrace obslužných rutin událostí a odstraněním odkazů na prvky uživatelského rozhraní, kdykoli je to možné.
  • Kvůli úspoře baterie omezte, jak často zjišťujete data, dotazujete senzor nebo plánujete úlohy na CPU v době, kdy je nečinný.

Přístup k datům

  • Pokud je to možné, předem načtěte obsah.
  • Ukládání obsahu do mezipaměti, který je nákladný pro přístup.
  • Při nenalezení položky v mezipaměti co nejrychleji zobrazte zástupné uživatelské rozhraní, které signalizuje, že aplikace stále načítá obsah.

Nástroj pro měření výkonu

Při psaní kódu přidejte kód, který během spouštění aplikace protokoluje zprávy a události v určitých bodech. Později pomocí nástrojů pro profilaci, jako je Windows Záznam výkonu a Windows Analyzátor výkonu (jak je součástí Windows Performance Toolkit), můžete vytvořit a zobrazit sestavu o výkonu vaší aplikace.

Windows poskytuje rozhraní API protokolování podporovaná trasováním událostí pro Windows (ETW), která nabízejí bohaté řešení protokolování a trasování událostí. Rozhraní API v oboru názvů Windows.Foundation.Diagnostics zahrnuje třídy FileLoggingSession, LoggingActivity, LoggingChannel a LoggingSession.

// using Windows.Foundation.Diagnostics;

LoggingChannel myLoggingChannel = new LoggingChannel("MyLoggingChannel");
myLoggingChannel.LogMessage("Here's my logged message.", LoggingLevel.Information);

Protokolování událostí spuštění a zastavení v určitém časovém období:

LoggingChannel myLoggingChannel = new LoggingChannel("MyLoggingChannel");
LoggingActivity myLoggingActivity;

using (myLoggingActivity = new LoggingActivity("MyLoggingActivity", myLoggingChannel))
{
    // A start event is logged when the activity begins.
    // Add code here to do something of interest.
}
// An end event is logged when the activity ends.

Testování a měření vůči výkonnostním cílům

Pomocí těchto technik a nástrojů otestujte, jak si vaše aplikace vede ve srovnání s vašimi výkonnostními cíli:

  • Otestujte použití široké škály hardwarových konfigurací, včetně stolních počítačů, notebooků, ultrabooků a tabletů.
  • Testujte na široké škále velikostí obrazovky. Širší obrazovky zobrazují více obsahu, což může negativně ovlivnit výkon.
  • Eliminujte tolik testovacích proměnných, kolik můžete:
    • Vypněte aplikace na pozadí na testovacím zařízení.
    • Před nasazením aplikace do testovacího zařízení sestavte aplikaci v konfiguraci vydané verze.
    • Spusťte aplikaci několikrát, abyste vyloučili náhodné testovací proměnné a zajistili konzistentní měření.
  • Otestujte nižší dostupnost napájení. Zařízení uživatelů můžou mít výrazně menší výkon než váš vývojový počítač.
  • K měření výkonu aplikací použijte kombinaci nástrojů, jako jsou Visual Studio diagnostické nástroje a Windows Analyzátor výkonu.

Reakce na výsledky testu výkonnosti

Po analýze výsledků testu výkonnosti určete, jestli jsou potřeba nějaké změny:

  • Měli byste změnit rozhodnutí o návrhu aplikace nebo optimalizovat kód?
  • Měli byste do kódu přidat, odebrat nebo změnit instrumentaci?
  • Měli byste upravit cíle výkonu?

V případě potřeby je proveďte a vraťte se k instrumentaci nebo testování.

Optimize

Optimalizujte v aplikaci jenom cesty ke kódu kritickému pro výkon – ty, kde se tráví nejvíce času. Profilování vám řekne, o které oblasti jde. Často existuje kompromis mezi osvědčenými postupy návrhu a kódem, který se provádí při nejvyšší optimalizaci. Upřednostnit produktivitu vývojářů a dobrý návrh softwaru v oblastech, kde výkon není problém.