Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Gebruikers verwachten dat hun apps responsief blijven, zich natuurlijk voelen en hun batterij niet leegmaken. Technisch gezien is prestaties een niet-functionele vereiste, maar het behandelen van prestaties als een functie helpt u te voldoen aan de verwachtingen van uw gebruikers. Geef doelen en meetresultaten op. Dit zijn belangrijke factoren. Bepaal uw prestatiekritieke scenario's, definieer wat goede prestaties betekenen en meet vervolgens vroeg en vaak gedurende de levenscyclus van uw project om er zeker van te zijn dat u uw doelen bereikt.
Doelen opgeven
De gebruikerservaring is een eenvoudige manier om goede prestaties te definiëren. De opstarttijd van een app kan invloed hebben op de perceptie van de prestaties van een gebruiker. Een gebruiker kan de opstarttijd van een app van minder dan één seconde als uitstekend beschouwen, van minder dan vijf seconden als goed, en van meer dan vijf seconden als slecht.
Andere metrische gegevens hebben minder voor de hand liggende invloed op de gebruikerservaring, zoals geheugen. De kans dat een app wordt beëindigd terwijl deze is gepauzeerd of inactief is, neemt toe naarmate de actieve app meer geheugen gebruikt. Hoog geheugengebruik verslechtert de ervaring voor alle apps op het systeem, dus het is redelijk om een geheugenverbruiksdoel te hebben.
Stel initiële doelen in die specifiek en meetbaar zijn. Ze moeten in drie categorieën worden onderverdeeld:
- Tijd : hoe lang het duurt voordat gebruikers of de app taken heeft voltooid
- Vloeiendheid : de snelheid en continuïteit waarmee de app zichzelf opnieuw tekent als reactie op gebruikersinteractie
- Efficiëntie — hoe goed de app systeembronnen bespaart, inclusief accustroom
Time
Denk na over acceptabele tijdsintervallen (interactieklassen) waarbinnen gebruikers hun taken kunnen voltooien.
| Interactieklasse | Gebruikersperceptie | Ideal | Maximum | Examples |
|---|---|---|---|---|
| Snel | Minimaal merkbare vertraging | 100 ms | 200 ms | De app-balk openen; druk op een knop (eerste antwoord) |
| Typisch | Snel, maar niet snel | 300 ms | 500 ms | Formaat wijzigen; semantische zoom |
| Responsief | Niet snel, maar voelt responsief | 500 ms | 1 seconde | Ga naar een andere pagina; de app hervatten |
| Launch | Concurrentieervaring | 1 seconde | 3 seconden | De app voor de eerste keer starten |
| Doorlopend | Reageert niet meer | 500 ms | 5 seconden | Een bestand downloaden van internet |
| Gevangen | Duurt lang; gebruiker kan weggaan | 500 ms | 10 seconden | Meerdere apps installeren vanuit de Store |
Wijs interactieklassen toe aan de prestatiescenario's van uw app. Wijs voor elk scenario de verwijzing naar een bepaald tijdstip van de app, een deel van de gebruikerservaring en een interactieklasse toe.
Vloeibaarheid
Specifieke meetbare vloeiendheidsdoelen voor uw app kunnen het volgende omvatten:
- Geen onderbrekingen of haperingen bij het opnieuw tekenen van het scherm
- Animaties worden weergegeven bij 60 frames per seconde (FPS)
- Wanneer een gebruiker veegt of scrolt, toont de app 3–6 pagina’s content per seconde
Efficiëntie %
Specifieke meetbare efficiëntiedoelen voor uw app kunnen het volgende omvatten:
- Het CPU-percentage van uw app ligt op of onder een doelwaarde en het geheugengebruik in MB is altijd op of onder een doel
- Wanneer de app inactief is, zijn CPU- en geheugengebruik minimaal
- Uw app kan actief worden gebruikt voor een doelaantal uren op accustroom
Uw app ontwerpen voor prestaties
Gebruik uw prestatiedoelen om het ontwerp van uw app te beïnvloeden. Houd rekening met deze aspecten:
UI
- Maximaliseer de parse- en laadtijd en geheugenefficiëntie voor elke pagina door uw XAML-opmaak te optimaliseren. Stel het laden van de gebruikersinterface en code uit totdat deze nodig is.
-
ListViewZorg ervoorGridViewdat alle items dezelfde grootte hebben en gebruik zoveel optimalisatietechnieken als u kunt. - Declareer de gebruikersinterface in markeringen in plaats van deze imperatief samen te stellen in code.
- Stel het maken van UI-elementen uit totdat de gebruiker ze nodig heeft met behulp van het attribuut x:Load.
- Geef de voorkeur aan thematransities en animaties boven animaties met een storyboard. Voor animaties met storyboards zijn constante updates van het scherm vereist en moeten de CPU- en grafische pijplijn actief blijven.
- Laad afbeeldingen op een grootte die geschikt is voor de weergave waarin u ze presenteert.
CPU, geheugen en energie
- Plan werk met lage prioriteit in op threads met lage prioriteit. Zie Asynchrone programmering en de klasse DispatcherQueue .
- Minimaliseer de geheugenvoetafdruk van uw app door dure resources (zoals media) vrij te geven wanneer ze niet nodig zijn.
- Vermijd geheugenlekken door eventhandlers te deregistreren en verwijzingen naar UI-elementen waar mogelijk te verwijderen.
- Voor batterij-efficiëntie moet u conservatief zijn met hoe vaak u gegevens peilt, een query uitvoert op een sensor of een planning uitvoert op de CPU wanneer deze niet actief is.
Gegevenstoegang
- Indien mogelijk kunt u inhoud vooraf fetchen.
- Cache-inhoud die duur is voor toegang.
- Toon bij cachemisses zo snel mogelijk een tijdelijke interface die aangeeft dat de app nog inhoud laadt.
Instrument voor prestaties
Terwijl u code codet, voegt u code toe waarmee berichten en gebeurtenissen op bepaalde punten worden geregistreerd terwijl uw app wordt uitgevoerd. Gebruik later profileringshulpprogramma's zoals Windows Performance Recorder en Windows Performance Analyzer (beide opgenomen in de Windows Performance Toolkit) om een rapport te maken en weer te geven over de prestaties van uw app.
Windows biedt logboekregistratie-API's die worden ondersteund door Event Tracing voor Windows (ETW) die een uitgebreide oplossing voor logboekregistratie en tracering bieden. De API's in de Windows. Foundation.Diagnostics-naamruimte omvat de FileLoggingSession, LoggingActivityen LoggingChannelLoggingSession klassen.
// using Windows.Foundation.Diagnostics;
LoggingChannel myLoggingChannel = new LoggingChannel("MyLoggingChannel");
myLoggingChannel.LogMessage("Here's my logged message.", LoggingLevel.Information);
Begin- en stopgebeurtenissen gedurende een bepaalde periode registreren:
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.
Prestatiedoelen testen en meten
Gebruik deze technieken en tools om te testen hoe uw app presteert ten opzichte van uw prestatiedoelen:
- Test op basis van een groot aantal hardwareconfiguraties, waaronder desktops, laptops, ultrabooks en tablets.
- Test voor uiteenlopende schermgroottes. Bredere schermen tonen meer inhoud, wat negatieve gevolgen kan hebben voor de prestaties.
- Elimineer zoveel testvariabelen als u kunt:
- Schakel achtergrond-apps uit op het testapparaat.
- Bouw uw app in de releaseconfiguratie voordat u deze implementeert op het testapparaat.
- Voer de app meerdere keren uit om willekeurige testvariabelen te elimineren en consistente metingen te garanderen.
- Test op verminderde beschikbaarheid van energie. Apparaten van gebruikers hebben mogelijk aanzienlijk minder vermogen dan uw ontwikkelcomputer.
- Gebruik een combinatie van hulpprogramma's zoals Visual Studio diagnostische hulpprogramma's en Windows Performance Analyzer om de prestaties van apps te meten.
Reageren op resultaten van de prestatietest
Nadat u de resultaten van de prestatietest hebt geanalyseerd, moet u bepalen of er wijzigingen nodig zijn:
- Moet u uw ontwerpbeslissingen voor apps wijzigen of uw code optimaliseren?
- Moet u instrumentatie toevoegen, verwijderen of wijzigen in de code?
- Moet u uw prestatiedoelen herzien?
Als er wijzigingen nodig zijn, moet u deze aanbrengen en terugkeren naar instrumentering of testen.
Optimize
Optimaliseer alleen de prestatiekritieke codepaden in uw app, de paden waar de meeste tijd wordt besteed. Profilering geeft aan welke gebieden dit zijn. Vaak is er sprake van een compromis tussen goede ontwerpprocedures en code die op de hoogste optimalisatie wordt uitgevoerd. Prioriteit geven aan productiviteit van ontwikkelaars en goed softwareontwerp op gebieden waar prestaties geen probleem zijn.
Verwante onderwerpen
Windows developer