12
votes

WPF est-il la raison que ma demande est lente?

Je développe une application utilisant WPF. L'application exécute plein écran et j'en ai besoin pour redimensionner de manière gentiment la résolution du moniteur. Le graphiste a conçu de belles images pour les boutons d'interface utilisateur, les arrière-plans, etc. à l'aide d'un plug-in illustrator, toutes les images ont été converties en fichiers XAML. J'ai ajouté toutes ces images dans l'application et ils ont fière allure. J'utilise également beaucoup de mises en page grille afin que l'écran puisse redimensionner tout en conservant la mise en page. Tout cela affiche comme vous le souhaitez, rien ne semble étiré lorsqu'il est exécuté à une résolution différente. Cependant, les transitions d'écran et l'interaction de l'interface utilisateur sont lentes.

Je me demande, c'est que cela est dû à la forte utilisation de graphiques? Est-ce que j'utilise trop de grille mises en page? Mais j'ai besoin de la grille s afin que je puisse avoir une indépendance de résolution.

L'application fonctionne bien sur ma machine de développement, mais est très sensiblement plus lente sur la machine avec des capacités de performance inférieures. Oui, cela doit être attendu, mais pas dans la mesure où je vois. Mon employeur insiste sur le fait que la demande fonctionne correctement sur ces machines de performance inférieures.

J'ai fait du profilage de l'application et il semble que ce qui prend le plus de temps est le produit d'affichage (bien que je ne suis pas sûr de bien comprendre à quel point utiliser efficacement un profileur).

Si c'est le WPF qui cause le ralentissement, que puis-je faire pour améliorer cela?


1 commentaires

Je n'en sais pas assez à ce sujet pour écrire une vraie réponse, mais j'attendrais attentivement la sortie du plugin illsutrator-xaml. À tout le moins, voir ce que votre application se comporte comme avec des éléments graphiques d'espace réservé (par exemple, une grille vide).


6 Réponses :


11
votes

Vous pouvez forer les activités du WPF utilisant le temps utile à l'aide du Outils de profilage de performance Pour WPF . En supposant que la charge graphique lourde entraîne le ralentissement, cela devrait vous donner une aide sur ce qui pourrait avoir besoin d'être simplifié (par exemple des aménagements) ou supprimés (par exemple, des effets bitmap (celles-ci sont un tueur de Perf classique, bien que je ne veux pas préjuger de préjudice votre profilage!)).


0 commentaires

5
votes

S'il s'agit du WPF qui cause le ralentissement

probablement pas;)

Il est beaucoup plus probable que ce soit votre code qui provoque le ralentissement. WPF est puissant, mais vous devez comprendre les concepts de base pour le faire fonctionner bien ... Vous devriez consulter Ceci Vidéo d'une session PDC, il offre de nombreux conseils sur la manière de rendre votre application WPF plus rapidement


2 commentaires

Cela semble être l'emplacement actuel de cette vidéo: canal9.msdn.com/events/pdc / PDC09 / CL10


IMO Cette réponse est sans base ou substance. Bien sûr, WPF est puissant, mais ce pouvoir ne vient pas sans frais généraux. Ce ne serait pas une étendue de l'imagination de dire que les machines d'extrémité inférieure des clients ne répondent pas aux spécifications MIN / REC pour WPF. La réponse réelle ici est de profiler la demande - uniquement alors une décision objective peut être prise quant aux étapes suivantes.



1
votes

performances WPF dépend fortement de la qualité de la carte vidéo dans la machine plus que le processeur / la mémoire. Mauvaise carte vidéo = Bad WPF Performance.


0 commentaires

1
votes

Eh bien, ceci est un coup long : quand j'ai installé VSTS 2010 (et il utilise WPF), il était très lent sur un serveur Windows 2008 avec suffisamment de CPU / mémoire et très rapide dans un ordinateur portable plus modeste. Nous avons réussi à désactiver l'accélération matérielle et il est devenu remarquablement rapide dans cette machine.

Peut-être que vous voulez essayer cette configuration, car il est très simple: Visual Studio 2010 Beta 2 Editeur correction de performance exécutée sur une machine virtuelle


2 commentaires

Intéressant, jamais vu Disablehwaccente utilisée pour accélérer le WPF auparavant!


Cela m'a fait penser aussi .. mais travaillé sur vs2010, je jure =) Stackoverflow.com/questions/1743525/...



4
votes
  1. Convertissez vos images vectorielles XAML de boutons en images PNG transparentes. Le chemin et les formes sont très lourds pour rendre, calculer et redimensionner. Surtout après le déploiement, les images ne changent jamais de mieux pour les avoir comme raster, alors vecteur, à moins que vous ne souhaitiez effectuer une animation en douceur de la forme, de la taille ou d'autres attributs.

  2. Les grilles sont des gestionnaires de présentation très coûteux par rapport à la toile, DockPanel. Vous pouvez certainement penser à remplacer certaines grilles avec DockPanel parfois, mais oui, ce n'est pas un correctif facile, il nécessite beaucoup de brainstorming.

  3. Évitez le panneau avec un seul enfant. Essayez de réduire la hiérarchie visuelle.

  4. Utilisez plus de taille fixe pour les boutons et de tels petits éléments, si vous spécifiez des tailles fixes d'enfants, il devient facile pour les panneaux de faire un traitement de mise en page.


3 commentaires

Les images PNG ne réduisent pas bien, c'est pourquoi je suis allé avec des vecteurs.


De plus, comment développer une application qui ajustera la mise en page pour s'adapter à la résolution de l'écran à moins que je ne repose sur des grilles?


Toutes les images doivent ne pas nécessairement être dans PNG, par exemple toutes les icônes, des boutons ou similaires sur les boutons de retour / avant de IE, ils restent toujours les mêmes même si vous redimensionnez, de tels boutons peuvent être convertis en PNG. Vous pouvez utiliser DockPanel au lieu de la grille ou utilisez des tailles de colonne / rangée relatives au lieu de "auto". Si vous pouvez afficher un peu l'écran de votre application, je peux alors suggérer de meilleures étapes.



3
votes

En général, WPF se perfore bien pire dans la performance de dessin que les formulaires Windows et GDI natif ou DirectX.

Oui, WPF est puissant dans le sens où vous pourriez faire des choses soignées qui ne sont pas prises en charge dans GDI, mais c'est plus paresseux.

Si vous avez beaucoup de dessin à faire, et que vous souhaitez le supporter sur du matériel lent, alors WPF n'est pas un bon choix.


0 commentaires