Speed up your Windows Phone App!

Du hast eine Windows Phone App und bist mit der Performance nicht ganz zufrieden? So ging es mir persönlich zumindest bei einer meiner Apps. Doch keine Sorge! Denn mit nur wenigen einfachen Anpassungen am Code lässt sich die Performance deiner App sichtbar verbessern. Ich zeige euch nun wie das geht…

1. Fast-App-Switching

Eine Windows Phone App kann mehrere Zustände einnehmen. Wird eine laufende App beendet, so kann diese entweder “Dormant” oder “Tombstones” sein. Ersteres bedeutet, dass die Daten der App weiterhin im Arbeitsspeicher des Phones gespeichert sind, wohingegen bei letztem der gesamte Datenbereich im Hauptspeicher freigegeben wurde, um Platz für andere Apps zu schaffen. Wenn eine App nun also vom “Dormant” Zustand wieder aktiviert wird, brauchen keine Daten der App geladen vom IsolatedStorage oder aus dem Web geladen werden, da diese schließlich noch vorhanden sind. Daher kommt auch der Name Fast-Application-Switching, da man so ohne Ladezeiten zwischen verschiedenen Apps hin und her wechseln kann. Doch wie implementiert man das Ganze nun? Ganz einfach! Man muss beim Activated-Event der Anwendung nur die e.IsApplicationStatePreserved Property prüfen:

if (e.IsApplicationInstancePreserved)
{
// data is still in memory
}
else
{
// TODO: load data here...
}

Mehr dazu findet ihr auf dem MSDN Blog.


 


2. Fast-App-Resume


Dieses Feature kennt ihr bestimmt schon aus Apps wie WhatsApp oder Facebook. Ihr beendet die App aus einem einem Chatfenster, startet die App neu und landet statt auf der Startseite wieder in diesem Chatfenster. Dieses Feature eignet sich zwar nur für komplexere Apps mit tief versschachtelten Seiten, jedoch könnt ihr auch das recht einfach in eure App integrieren. Grundlegend muss dazu nur die WMAppManifest.xml angepasst werden und der Page-Stack verändert werden. Genaue Implementierungsdetails sich auf dem Windows Phone Developer Blog sehr schön beschrieben.


 


3. Loaded- vs. NavigatedTo-Event


Ich habe mir in der Vergangenheit oft die Frage gestellt, ob ich die Daten meiner App im Loaded-Event einer Page oder lieber im NavigatedTo-Event laden soll. Zwar kann man diese Aussage jetzt nicht verallgemeinern, jedoch musste ich nun feststellen, dass es sich manchmal echt lohnen kann, die Daten im NavigatetTo-Event zu laden. Wissen sollte man allerding zuvor, dass das NavigatedTo- vor dem Loaded-Event gefeuert wird, da letztes erst gefeuert wird, nachdem alle Steuerelemente der Page geladen wurden. Da die beliebten Page-Transitions, wie beispielsweise das Seitenplättern zwischen Pages oder das elegante Roll-in des Panorama-Controls, schon im NavigatedTo-Event gestartet werden, ist es bei größeren Datenmengen oft der Fall, dass sonst die Daten erst angezeigt werden, nachdem die Animation schon vorüber ist. Somit sollte man dieses Event zum Laden von Daten dem Loaded-Event vorziehen. Wie auch schon beim Fast-App-Resume ist es jedoch auch hier sehr wichtig zu prüfen, bereits geladene Daten nicht nochmal zu laden, da beim Hin- und Herwechseln zwischen Seiten die Daten im Hauptspeicher weiterhin zur Verfügung stehen und nicht sofort verloren gehen. Das Ergebnis ist dann, wie ihr euch bestimmt schon denken könnt, eine viel kürzere Antwortzeit innerhalb der App. Und die nicht verpassten Animationen machen die App zwar nicht wirklich schneller, jedoch wirkt die App so viel abgerundeter, was besser zum Ökosystem von Windows Phone passt.


 


Neben diesen Optimierungen gibt es natürlich noch andere Wege die Performance zu verbessern. Als Beispiele wären beispielsweise Lazy-Loading oder Caching von Daten zu nennen, welche meistens jedoch mit deutlich mehr Aufwand verbunden sind.


Habt ihr Fragen zu den von mir genannten Beispielen? Oder habt ihr noch andere Optimierungstipps, welche sich sehr einfach umsetzten lassen? Über Feedback wäre ich euch sehr dankbar!

Comments

Popular posts from this blog

UWPCore: A development acceleration framework for the Universal Windows Platform

How to setup an eGPU on Ubuntu for TensorFlow

Benchmarking Tensorflow Performance on eGPU