2009-12-04 9 views
5

Nous avons une application qui génère environ 100 animations à l'exécution et elles sont toutes ajoutées à un storyboard unique puis jouées. Le problème est que l'animation est extrêmement lente. Les objets qui sont animés sont des formes et des splines et une bonne quantité de calcul est effectuée dans le backend pour générer les splines personnalisées. L'ordinateur en cours d'exécution est un quad core avec une bonne carte graphique.Comment pouvons-nous améliorer les performances de nos animations WPF (100 d'entre elles)?

Des suggestions sur la façon dont nous pouvons résoudre ce problème? Devons-nous diviser les animations en plusieurs storyboards ou animer sur différentes toiles?

Merci

+0

quelle version du système d'exploitation? Combien d'éléments d'interface utilisateur sont animés? –

+0

Son exécution dans Windows 7. Dans chaque animation, un seul objet est animé mais il y a environ 100 animations dans un storyboard. – user180812

+0

L'animation modifie-t-elle simplement la position des objets ou implique-t-elle également une modification de la taille/forme? Si le premier alors il devrait être possible d'animer autant d'objets. Si plus tard, vous donnez au calcul une énorme quantité de calcul et donc la perf lente. –

Répondre

2

Son peu difficile de savoir ce qui est ralentir votre animation sans voir l'animation et le code. Mais je vais vous donner des points généraux qui peuvent aider à les améliorer.

  1. Déplacez votre calcul dans un thread différent, si le calcul est très lourd. Le thread Dispatcher est occupé à gérer votre interface utilisateur, donc si vous mettez tout dans un thread, cela ralentira certainement les choses.
  2. Réutilisez vos splines, vos formes, etc., cela vous aidera certainement car vous libérerez également votre application de routines de récupération de place coûteuses. Enfait avant de commencer l'animation, affichez une animation différente comme horloge etc pour créer tous les objets requis au début.
  3. Explorez les options de mise en cache de bitmaps et tentez de les implémenter.