Question

Notre concepteur utilise Blend pour le style de notre application WPF. Quand il choisit les ressources locales pour les propriétés, Blend les appliquer comme {DynamicResource} au lieu d'un {StaticResource}. Je pense que le fait Blend, car elle permet l'application à nouveau sur le thème lors de l'exécution sans avoir à redémarrer.

Ma question est: est-il un coût de performance significatif à cette recherche supplémentaire? Devons-nous demander au concepteur de revenir en arrière et modifier manuellement ces Dynamics Statics?

Voici une grande question SO qui explique la différence entre les types: Quelle est la différence entre StaticResource et DynamicResource dans WPF?

Était-ce utile?

La solution

Malheureusement, c'est un cas où il est très difficile de faire une comparaison directe de la performance relative depuis le lieu où toute dégradation pourrait apparaître est profonde dans le moteur WPF. Dans les premiers jours de l'utilisation de WPF StaticResource a été l'un des changements de réglage des performances standard qui a été recommandé et nous avait tendance à suivre plutôt strictement dans notre organisation et de recommander aux autres. Je suis vraiment ennuyé que Blend a tout dynamique, même si cela a aidé à rendre les ressources d'autres fichiers correctement au moment de la conception.

Au fil du temps mon avis sur ce qui a changé, en raison un peu d'expérience, mais aussi les commentaires des gens sur l'équipe de Blend à Microsoft. Comme vous le savez probablement, Blend est entièrement écrit en WPF et a un thème alternatif complet (Light) qui peut être mis à la volée pendant que l'application est en cours d'exécution. Ceci est possible parce qu'ils ont utilisé DynamicResource pour à peu près tous leur style. Selon eux, cela n'a pas vraiment causé de réels problèmes de perf. Étant donné que Blend est probablement l'application WPF le plus largement utilisé dans l'existence, j'ai tendance à accorder beaucoup d'importance à leurs vues.

L'autre chose à considérer est l'utilité réelle de DynamicResource. La possibilité de changer de style à la volée est une partie de celui-ci, mais aussi la flexibilité qu'il vous donne dans la construction de votre hiérarchie de ressources peut rendre beaucoup plus facile de gérer les styles partagés. Je suis sûr que vous avez exécuté dans une situation où une référence StaticResource a fait exploser lors de l'exécution parce que la ressource il souligné devait être chargé dans une autre branche de la hiérarchie.

Il est évident que StaticResource est très utile pour pointer vers une clé spécifique que vous savez va être disponible au bon moment. Lorsque XAML écriture main je tends toujours à l'utiliser tout le temps. Mais compte tenu de la productivité que vous gagnez sur d'avoir un concepteur de générer votre XAML dans Blend, toute petite performances gagner que vous pourriez obtenir est probablement pas la peine les frais généraux de tout-en maintenant la main comme statique.

Autres conseils

Il est dit être une différence de performance, mais si elle est « significatif » dépendra de combien dynamiques se produisent des recherches. Sauf si vous avez des milliers de références DynamicResource il ne va probablement pas être visible de toute façon; si les ressources dynamiques réalisées bien pire que les statiques, je soupçonne que Blend serait plus prudent au sujet de les générer.

En fait, quand je courais un test naïf, je trouve le résultat contre-intuitif que DynamicResource a couru plus rapide que StaticResource (avec 3000 références de ressources, j'ai vu les temps de chargement autour de 200ms quand je DynamicResource pour tout vs . autour de 400ms pour StaticResource).

Ce fut un test irréaliste pour de nombreuses raisons: toutes les références étaient à la même chose, je courais sous le débogueur, etc., etc. Mais il estime qu'il serait prématuré de faire des efforts pour changer la sortie Blend « juste cas » - et que si vous remarquez un ralentissement, il peut ne pas être nécessairement la faute des références DynamicResource - toujours mesurer

Malheureusement, si vous modifiez les ressources dynamiques en statique, il se brisera Blend. Cela semble être vrai en particulier lors de l'utilisation UserControls qui font référence à des ressources dynamiques, si vous les modifiez à l'électricité statique, la commande ne rendra pas lorsque hébergé dans un autre contrôle dans le mélange.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top