Julien Dollon | [WinRT] 5 astuces pour ameliorer vos performances

A goal without a plan is just a wish

Je m’appelle Julien, j'ai 26 ans et je suis un ingénieur logiciel chez Microsoft pour Windows, XBOX, Office et Surface.

Je travaille dur pour un jour avoir un grand impact sur ce monde.

Mais comme il n’y a pas de titans à combattre, que les monstres n’existent pas, je fais du dev chez Microsoft sur des produits, qui je l’espère, vous apporteront de la joie.

Plus d'infos sur moi ici.

Service d'evaluation de competences et de creation de site webs.

 

View Julien  Dollon's profile on LinkedIn

Tous les posts de ce blog ne reflètent que mon opinion de jeune auteur et pas (nécessairement) celui de mes employeurs et clients.

[WinRT] 5 astuces pour ameliorer vos performances

Vous le savez deja, les performances dans votre application dependent grandement de deux choses:

  • Votre pré-disposition à faire un bel algo bien chiadé O(n) au lieu de O(n^2)
  • Des tips and tricks à appliquer.

Aujourd’hui je ne parlerai que de XAML/C# et de quelques petits tips&tricks qui vous permetteront d’avoir une experience uniforme de x64 a ARM.

 

0. Le monde entier n’a pas un 8 coeurs 12go de ram !

Le premier conseil que je peux vous donner est de toujours garder à l’esprit que vous developpez pour de petits devices.

La meilleure astuce, est de se dire qu’on developpe pour un telephone. Donc on applique les memes regles de best practices que pour Windows Phone (du style evitez le nombre de layers, pas de usercontrol dans tous les sens and co). Car rien de tel que de mauvaises performances pour avoir des reviews totalement plombées.

 

1. Tester vos applications !

Il est possible de créer un package Neutral et de le publier pour toutes les plateformes. Les tablettes ARM etant disponibles dans deux jours, mon conseil est d’arreter de publier une app en neutral sans l’avoir tester au préalable.

C’est comme publier un site internet sans l’avoir testé sous IE…

Il est possible de choisir les builds (x64/x86) pour publier par la suite la version ARM.

 

2. Ne pas abuser de await et ne pas bloquer l’UI

Comme je l’ai dis dans un precedent article. Attention aux await dans les foreachs, car si on ne comprends pas le principe on arrive vite a des applications qui se load tres lentement. Abusez des Task.Run(), meme si cela ne vous garantie pas que WinRT va créer un thread pour votre code, cela peut ameliorer vos perfs et ne pas bloquer l’UI.

En parlant de loading, ne depassez pas les 15 secondes de splashscreens, meme si vous mettez derriere une AnimatedSplashScreen, cela peut vite agacer l’utilisateur. Preferez charger le contenu au fur et à mesure, quitte à repenser votre UI.

Et pour finir, il faut comprendre que le Dispatcher fonctionne comme une pile d’expression lambda qu’un ordonoceur va executer suivant la priorité qu’on lui donne. De ce fait, on a parfois l’impression sous x64 que le fait de mettre await devant RunAsync nous permet d’attendre l’execution de notre lambda, alors que ce n’est souvent pas le cas sous des cheaps moins puissantes.

 

3. Détecter la platform

Comme vous pouvez créer une build par plateforme, ce n’est pas une mauvaise idée de faire des regles de compilations suivant x64/x86/ARM pour avoir une experience differente.

Je prends l’exemple d’un background qui bouge parallelement au deplacement d’une gridview (comme la home de Windows 8). C’est certes tres jolie mais sous ARM, toutes transformations (Translation par exemple) qui n’est pas executé par le GPU peut provoquer des lags (cela depend de beaucoup de chose). Mais ce genre de fonctonnalité qui coutent en resources peuvent etre desactiver pour les petits processeurs.

 

4. Utilisez le GPU

Abusez des Storyboards qui sont executées par le GPU. Elles sonts 99% du temps totalement smooth!

Oubliez les Storyboards qui ne sont pas GPU Accelerated (une option à mettre à true) car vous aurez des lags sur les petits PCs.

 

5. Attention au VirtualizingStackPanel

Je sais que le VirtualizingStackPanel est une bonne idée. Mais faites attention de bien comprendre ses limites. Il faut comprendre les types de RecycleMode et surtout voir les comportements sous des processeurs lent. Parfois, il ne charge pas assez vite le contenu à afficher et cela peut affecter l’experience utilisateur. Il peut aussi avoir des comportements speciaux lors d’utilisation de Gridview/Listview grouped. Et j’ai l’impression qu’il peut, parfois, ne pas reagir pareil de x64 a x86 ou autre.

 

 

Voila, un article ecrit un peu a l’arache mais j’espere que ca vous a plu!

Posté le: Oct 24 2012, 21:00 | Commentaires
Catégorie(s): .NET | Général | WinRT

blog comments powered by Disqus
Anciens commentaires (archive):