Comment accélérer les programmes WPF?

J’adore programmer avec et pour Windows Presentation Framework. J’écris principalement des applications de type navigateur utilisant WPF et XAML.

Mais ce qui me contrarie vraiment, c’est la lenteur de WPF. Une page simple avec seulement quelques contrôles se charge assez rapidement, mais dès qu’une page est un peu plus complexe, comme contenant beaucoup de champs de saisie de données, un ou deux contrôles de tabulation, etc., cela devient douloureux.

Le chargement d’une telle page peut prendre plus d’une seconde. Des secondes, en effet, surtout sur des ordinateurs moins rapides (lire: les ordinateurs des clients), cela peut prendre des années.

Identique à la modification des valeurs sur la page. Tout à propos de l’interface utilisateur de WPF est en quelque sorte lent.

C’est tellement méchant! Ils me donnent ce beau cadre, mais le rendent si péniblement lent, alors je vais devoir m’excuser tout le temps auprès de nos clients!

Ma question:

  1. Comment accélérez-vous WPF?
  2. Comment profilez-vous les goulots d’étranglement?
  3. Comment gérez-vous la lenteur?

Puisque cela semble être un problème universel avec WPF, je cherche des conseils généraux, utiles dans de nombreuses situations et problèmes.

Quelques autres questions connexes:

  • Quels outils utilisez-vous pour le développement WPF?
  • Outils pour développer des applications WPF ou Silverlight

  1. Comment accélérez-vous WPF?

    Souvent, après avoir utilisé l’un des outils de profilage suivants, il est évident que ce sont mes goulots d’étranglement.

    • Si la mémoire est le problème, je virtualise mes données.
    • Si le temps de rendu est le problème, je virtualise les contrôles ou simplifie les modèles de contrôle dans la mesure du possible.
    • Si le problème de temps de traitement est le problème, j’essaie d’améliorer mon algorithme ou de déplacer ce travail sur un thread d’arrière-plan et d’afficher une impulsion dans mon interface utilisateur pendant le travail.
  2. Comment profilez-vous les goulots d’étranglement?

    • Pofiler de mémoire .NET
    • dotTrace
    • Outils de profilage des performances pour WPF
    • Espionner
    • Crack.NET
  3. Comment gérez-vous la lenteur?

    Profilage et conseil.

Installez SP1 … Des charges de très bonnes performances augmentent pour WPF !!!

Lire plus ici

Voici un exemple de 2 améliorations apscopes dans SP1: défilement différé et recomposition de l’élément d’interface utilisateur !!!

Je ne peux pas append de commentaires, c’est pourquoi je poste une nouvelle réponse à cette question: j’ai trouvé cette vidéo du pdc09 qui donne des idées sur la façon de profiler les applications wpf et parce que cela m’a beaucoup aidé.

Optimisation et parsing des performances des applications WPF avancées

WPF est destiné aux ordinateurs équipés de cartes graphiques modernes. Vos clients ont-ils des cartes graphiques modernes capables d’exécuter Aero? Si vos clients ont des cartes graphiques plus anciennes, WPF utilisera un rendu logiciel extrêmement lent par rapport aux graphiques accélérés par le matériel.

Vous pouvez également vouloir profiler votre application pour vous assurer que c’est en fait WPF qui est la partie la plus lente. Il est possible qu’il y ait autre chose qui constitue le goulot d’étranglement.

Éviter les animations aide aussi parfois. Si vous devez utiliser des animations, diminuez le framerate, cela améliorera les performances “Feeled”

Supprimez les effets de transparence alpha / bitmap.

Pouvez-vous donner plus de détails?

J’ai seulement remarqué une performance lente quand j’utilise quelque chose comme une listview ou une grid qui a une certaine complexité. La solution est de le simplifier.

En dehors de cela, j’ai seulement remarqué une performance lente lors du chargement de l’application pour la première fois.

HTH

Je trouve utile de faire un pas de côté avec XAML et d’écrire l’intégralité de l’interface utilisateur en C #. Cela me permet de contrôler précisément quand les contrôles sont créés et chargés. Cela m’aide également à comprendre ce que fait XAML “sous les couvertures”.