Download - Booster votre application Windows Phone 8
Boostez votre application
Windows Phone 8Charlotte GAIDON, Jérémy ALLES
Pôle expertise Microsoft Grenoble
THALES
APP103
www.2day-app.com
Boostez votre application WP8
bit.ly/perfwp7
Charlotte Gaidon
Formatrice WPF / Silverlight
@nutchad
Cœur de métier : applications industrielles
Agence de 200 collaborateurs à Grenoble
Pôle d’expertise sur les technologies Microsoft
Présentation
Jérémy Alles
MVP / WPF Disciples
@jalpf
www.japf.fr
Boostez votre application WP8 213/02/2013
Agenda
• Quoi de neuf WP8 ?
• Sans les mains !
• Avec un peu de bonne volonté !
• Pour les plus courageux !
13/02/2013 Boostez votre application WP8 3
CE QUI CHANGE AVEC WP8
Quoi de neuf docteur ?
13/02/2013 Boostez votre application WP8 4
Flashback
13/02/2013 Boostez votre application WP8 5
Nouveau noyau
• Windows Phone 7 : noyau CE de Windows
Mobile
• Windows Phone 8 : noyau NT Windows 8Recoupement entre les runtimes « Desktop » et « Phone »
SharedAPI
13/02/2013 Boostez votre application WP8 6
Et mes applis ?
Compatibilité avec les 120 000 applis existantes !
WP8 Runtime
WP8 AppWP7.x App
Quirks Mode
Shim
Upgrade to WP8
bit.ly/perfwp8-upgrade
13/02/2013 Boostez votre application WP8 7
• dual-core 1024 Mo de RAM– devices puissants
– encore d’intérêt à paralléliser
• résolutions plus grandes
• 2 formats possibles
Nouveau hardware
Application.Current.Host.Content.ScaleFactor
13/02/2013 Boostez votre application WP8 8
NOUVEAUX OUTILS
13/02/2013 Boostez votre application WP8 9
Nouvel émulateur
• Différentes caractéristiques de device
• Hyper-V (processeur SLAT requis)
• Attention aux perfs dans l’émulateur WP7
13/02/2013 Boostez votre application WP8 10
Profiling et Monitoring
VS2012 apporte des nouveautés
13/02/2013 Boostez votre application WP8 11
13/02/2013 Boostez votre application WP8 12
Rappel des bonnes pratiques
• Limiter la taille de l’arbre visuel
• Fuites mémoire : attention aux events !
• Tirer parti du thread compositor– ScaleTransform vs animation FontSize
– TranslateTransform vs animation Margin
13/02/2013 Boostez votre application WP8 13
bit.ly/perfwp7
Economie d’énergie
• Utiliser la compression GZip
• Regrouper les requêtes web
• Thème foncé vs thème clair
• JPEG plus économe que PNG
13/02/2013 Boostez votre application WP8 14
bit.ly/perfwp8-gzip
Simulation Dashboard
• Connexion réseau
• Ecran de verrouillage
• Rappel
13/02/2013 Boostez votre application WP8 15
C# Async bit.ly/perfwp8-async
13/02/2013 Boostez votre application WP8 16
Boostez votre application WP8 – Sans les mains !
SANS LES MAINS !
Sit down and relax
13/02/2013 Boostez votre application WP8 17
• Fill Rate– WP7 : limite entre 2 et 4
– WP8 : limite entre 5 et 6
Surface counter
UI thread frame rate
Texture memory usage
Composition thread frame
rate
Screen fill rate counter
Intermediate surface counter
13/02/2013 Boostez votre application WP8 18
Les compteurs
Current.Host.Settings.EnableFrameRateCounter
Current.Host.Settings.EnableRedrawRegions
Gains en performances
• Progress Bar
• Panorama
• LongListSelector
• ViewPortControl– Off thread input
13/02/2013 Boostez votre application WP8 19
COMPILATION DANS LE
Accrochez-vous
13/02/2013 Boostez votre application WP8 20
Du code C# au code machine
Code machine
Compilateur
C#
Compilateur
JIT
Dev
ice
Intermediate
LanguageCode C#
Dév
elo
pp
eur
13/02/2013 Boostez votre application WP8 21
Génération et utilisation du code machine
• Avantages– Le code IL est indépendant de la machine
– On ne compile pas le code dont on ne se sert pas
• Inconvénients– Ajoute un surcoût à l’exécution
– Handicap pour le temps de démarrage des applications
13/02/2013 Boostez votre application WP8 22
Une solution ?
• Ne plus faire de code IL ?
• Faire le JIT « à l’avance » ?
• Ce n’est pas une idée nouvelle : NGEN– Exemple : Paint.Net
13/02/2013 Boostez votre application WP8 23
NGEN
Code machine
Compilateur
C#NGEN
Intermediate
LanguageCode C#
13/02/2013 Boostez votre application WP8 24
NGEN : oui, mais…
Mscorlib.dll
App1.exeLibrary.dll
App2.exe
13/02/2013 Boostez votre application WP8 25
NGEN : oui, mais…
Mscorlib.dll
App1.exeLibrary.dll
App2.exe
13/02/2013 Boostez votre application WP8 26
NGEN : oui, mais…
Mscorlib.dll
App1.exeLibrary.dll
App2.exe
13/02/2013 Boostez votre application WP8 27
De quoi a-t-on besoin ?
• Un démarrage rapide– Supprimer le coût du JIT au démarrage
• Déploiement facile et rapide– Temps d’exécution de NGEN trop long
• Pouvoir gérer les mises à jour de l’OS– Ne pas perdre les images compilées après update
13/02/2013 Boostez votre application WP8 28
Recompilation en cascade : pourquoi ?class Base
int
string
virtual void
class AppDerived
int
int int return
0x0 MethodTable
0x4 i
0x8 s
0xC j
0x0 MethodTable
0x4 i
0x8 s
13/02/2013 Boostez votre application WP8 29
int foo(int a) { return a + j; }
13/02/2013 Boostez votre application WP8 30
0x0 MethodTable
0x4 i
0x8 s
0xC j
Evolution de la classe mère
class Base
int
string
int
virtual void
0x0 MethodTable
0x4 i
0x8 s
0xC k
13/02/2013 Boostez votre application WP8 31
L’offset devrait
être 0x10 !
Le code généré devient invalide
0x0 MethodTable
0x4 i
0x8 s
0xC k
0x10 j
13/02/2013 Boostez votre application WP8 32
Remplacé via une
étape de link
supplémentaire
Idée : marquer les potentiels
changements…
13/02/2013 Boostez votre application WP8 33
Résumé : MDIL
• Compiler ce qui ne changera jamais directement
• Ajouter des tokens pour ce qui pourra changer
• Remplacer les tokens au moment de l’install
• Mise à jour refaire l’édition de lien à nouveau
13/02/2013 Boostez votre application WP8 34
Pourquoi compilation « dans le nuage » ?
C# CompilerC# Source
Code
MSIL
AssemblyMDIL
Compiler
MDIL
Assembly
MDIL
Assembly
Téléchargement sur
le device
Native
Image
Generator
Native
DLL Exécution
Cette partie se
passe “dans le
cloud” !
13/02/2013 Boostez votre application WP8 35
De quoi avait-on besoin ?
• Un démarrage rapide
• Déploiement facile et rapide
• Pouvoir gérer les mises à jour de l’OS
13/02/2013 Boostez votre application WP8 36
Comment tester ?
• Avoir un vrai device
13/02/2013 Boostez votre application WP8 37
AVEC UN PEU DE BONNE VOLONTÉ
!
13/02/2013 Boostez votre application WP8 38
La consommation mémoire
• Respecter la limite– Mesurer la consommation mémoire
• 2 nouveaux paramètres de BitmapImage– DecodePixelWidth
– DecodePixelHeight
bit.ly/perfwp8-memory
13/02/2013 Boostez votre application WP8 39
SLIDE SHOW
Compteur mémoire
démo
13/02/2013 Boostez votre application WP8 40
DÉMARRAGE ÉCLAIR
Fast-App-Resume
13/02/2013 Boostez votre application WP8 41
WP7 VS W8
Multi-tasking
démo
13/02/2013 Boostez votre application WP8 42
Fast-App-Switching ou Fast-App-Resume
?
Création d’une nouvelle instance
Reprise de l’instance suspendue
Switch
Resume
13/02/2013 Boostez votre application WP8 43
WP7 VS WP8
Fast-App-Resume
démo
13/02/2013 Boostez votre application WP8 44
2 stratégies pour le Fast Resume
Que se passe-t-il si on presse le bouton « back » juste après un fast resume ?
1. Afficher la dernière page visitée : « resume experience »annuler la navigation : e.Cancel = true;
2. Quitter l’application : « fresh instance experience »vider la back stack : RootFrame.RemoveBackEntry()
13/02/2013 Boostez votre application WP8 45
Limitation du Fast Resume
• Pas disponible pour applis Direct3D
• Pas disponible pour WP7.8
• Mise à jour d’une tuile à la sortie de l’appli– Deactivated
– OnNavigationFrom
• Speech recognition
13/02/2013 Boostez votre application WP8 46
POUR LES PLUS COURAGEUX
13/02/2013 Boostez votre application WP8 47
UTILISER DU CODE NATIF
“C makes it easy to shoot yourself in the foot; C++ makes it harder,
but when you do it blows your whole leg off” (Bjarne Stroustrup)
13/02/2013 Boostez votre application WP8 48
Cas d’utilisation C++
1
2
3
Performance
Réutilisation
Portabilité
13/02/2013 Boostez votre application WP8 49
Le SDK 8.0 ouvre la voie au code natif
Différents scénarios
– 100% natif : application Direct3D
– Hybride natif/managé
• Implémentation d’un traitement en C/C++
• Réutilisation d’une librairie existante
13/02/2013 Boostez votre application WP8 50
RValue references Forward declared enums Bidirectional fences
static_assert Alignment Data-dependency ordering
Auto Standard-layout and trivial types exception_ptr
Trailing return types Extended friend declarations Thread-local storage
Lambdas Local and unnamed types as template arguments __func__
Decltype Range-based for-loop C99 preprocessor
Right angle brackets override and final long long
extern templates Minimal GC support
nullptr Atomics
Strongly typed enums Strong compare and exchange
Support du C++ dans Windows Phone 8
• Visual C++ 2012
• Idem qu’avec Windows 8
• Nouvelles fonctionnalités C++11
13/02/2013 Boostez votre application WP8 51
FILTRE DE CONTRASTE
C# vs C++
démo
13/02/2013 Boostez votre application WP8 52
UN CUBE QUI TOURNE !
Interop XAML / D3D
démo
13/02/2013 Boostez votre application WP8 53
CONCLUSION
Réveillez-vous !
13/02/2013 Boostez votre application WP8 54
Conclusion
• Sans les mains– Compilation dans le cloud
• Avec un peu de bonne volonté– Fast-App-Resume
• Pour les plus courageux– Interop C++/DirectX/XAML
• Et un SDK 8.0 très riche en nouveautés
13/02/2013 Boostez votre application WP8 55
Accélérateur Windows
Ressources
Coaching
Visibilité
aka.ms/accelerateur-windows
Plus d’info ? RDV stand Windows 8
L’Accélérateur Windows
Merci !
Charlotte Gaidon
Formatrice WPF / Silverlight
@nutchad
Merci à Alex & Pierre (Microsoft) et aux collègues ;-)
Retrouvez-nous sur le stand 58
Jérémy Alles
MVP / WPF Disciples
@jalpf
www.japf.fr
2day-app.com
13/02/2013 Boostez votre application WP8 57
Donnez votre avis !
Depuis votre smartphone, sur :
http://notes.mstechdays.fr
De nombreux lots à gagner toutes les heures !!!
Claviers, souris et jeux Microsoft…
Merci de nous aider à améliorer les TechDays
http://notes.mstechdays.fr
Formez-vous en ligne
Retrouvez nos évènements
Faites-vous accompagner
gratuitement
Essayer gratuitement nos
solutions IT
Retrouver nos experts
Microsoft
Pros de l’ITDéveloppeurs
www.microsoftvirtualacademy.comhttp://aka.ms/generation-app
http://aka.ms/evenements-
developpeurshttp://aka.ms/itcamps-france
Les accélérateurs
Windows Azure, Windows Phone,
Windows 8
http://aka.ms/telechargements
La Dev’Team sur MSDN
http://aka.ms/devteam
L’IT Team sur TechNet
http://aka.ms/itteam