2010-12-16 1 views
8

J'ai quelques animations assez simples (déplacer du texte, déplacer des ellipses, etc.) et tourner en plein écran (1920x1080 moins la barre des tâches) la suite WPF Performance rapporte un bon framerate autour de 50 FPS tout au long de l'animation. Dirty Rect Addition est quelque part autour de 300 rect/s, les trames SW sont entre 0 et 4 et les trames HW sont entre 3 et 5. L'utilisation de la mémoire vidéo est d'environ 80 Mo.Comment savoir pourquoi une animation bégaie?

WPF Performance screen shot

Le problème est que les animations bégaie tous les demi-seconde. Il n'est certainement pas fluide :-(

Mon appareil est un nouvel ordinateur portable Dell XPS 15 avec le GeForce GT 435 avec 2 Go de mémoire - Les pilotes sont à jour (le même comportement se produit sur mon netbook (en plein écran) et donc je ne pense pas qu'il est lié au matériel)

Si je fais la petite fenêtre le bégaiement disparaît

le bégaiement se produit avec le plus simple des animations -.. même avec seulement quelques éléments mais ajouter plus d'éléments le rend certainement plus visible

Comment puis-je savoir quelle cause s ce bégaiement?

Quand je pense à cela, je n'ai pas vu d'animations WPF qui fonctionnent correctement en plein écran. Est-ce seulement possible?

+0

Peut-être que vous repeignez trop? C'est à dire. les pixels qui n'ont pas changé entre deux images sont marqués comme sales même s'ils ne le sont pas. –

+1

bonne question! En tant que test, avez-vous essayé de ne laisser qu'un seul contrôle animé pour voir si le bégaiement continue? si ce n'est pas le cas, comment mettez-vous à jour les données pour tous les contrôles, c'est-à-dire tout sur le même thread, ou générez-vous des tâches/méthodes parallèles et ensuite mettez à jour l'interface utilisateur? –

+0

> Quand je pense à cela, je n'ai pas vu d'animations WPF qui fonctionnent correctement en plein écran. Aha! WPF est très lent. Le mieux que vous puissiez faire est d'animer une interface utilisateur moins complexe, de réduire le framerate ou d'attendre le framework WTF qui résoudra tous ces problèmes; P –

Répondre

1

Patrick,

Je n'ai pas de réponses. Tout ce que je peux faire, c'est apporter de la solidarité. J'essaye d'animer un ItemsControl. Le concept est assez simple, vraiment. J'ai un ListView et dans le ListView j'ai un GridView. Je souhaite que les éléments de GridView passent facilement d'une ligne à une autre, car la liste sous-jacente est triée afin que, par exemple, une liste triée reste triée lorsque les valeurs de la liste changent.

J'ai remarqué ceci: l'animation sur des contrôles modérément complexes est un processeur. Le bégaiement dont je suis sûr est simplement lié au fait que le processeur est au maximum (j'ai remarqué que vous n'avez pas fourni le graphique CPU sur votre image ci-dessus). Gardez le CPU autour de 50% et l'animation semble lisse, au-dessus de 75% et vous obtenez ces bègues. Je travaille toujours sur le problème, mais je pense qu'il va plus loin que mon code.

Don

3

Avez-vous essayé de définir un "frame rate max" inférieure à l'animation?

<Storyboard Timeline.DesiredFrameRate="10"> 
    <!-- ....blah blah blah --> 
</Storyboard> 

Si votre animation est à l'origine recalcul massive d'éléments enfants ou des parents, en changeant le DesiredFrameRate aura un effet en cascade sur le nombre de calculs effectués par le système. En outre, consultez la section "Remarques" de ce link. Il explique pourquoi/quand vous devriez l'utiliser. Si la définition d'une fréquence d'images inférieure corrige votre bégaiement, vous devez envisager de simplifier votre XAML pour limiter la quantité de recalcul nécessaire à chaque image de votre animation (en limitant le nombre d'objets enfants ou parents redimensionnés - ou affectés manière - par toutes les images/modifications apportées par l'animation

Vous pouvez également consulter le "WPF Performance Suite".C'est un ensemble impressionnant d'outils pour déterminer ce qui se passe exactement dans votre application WPF, voir quelles parties de votre fenêtre sont repeintes et quand, et l'utilisation du processeur de chacun de vos éléments XAML!

Espérons que cela aide!

0

J'ai eu un problème similaire où il était bégaiement, rien de vraiment majeur cela ressemblait à de petits bégaiements ici et là pendant que je courais le programme. Sur une intuition, j'ai fermé Google Chrome pendant qu'il fonctionnait et qui l'a réparé, le défilement est devenu complètement lisse ...

Ainsi mon conseil serait si vous avez des navigateurs d'Internet ouverts vérifiez pour voir si les fermant des correctifs le problème.

Questions connexes