Frage

Unsere Designer werden mit Blend Stil unserer WPF-Anwendung. Als er lokale Ressourcen für Eigenschaften wählt, Mischung wird sie als {DynamicResource} gelten anstelle eines {StaticResource}. Meine Vermutung ist, dass Mischung dies tut, weil es die App ermöglicht es, ohne es neu starten zu müssen Re-Themen zur Laufzeit sein.

Meine Frage ist: Gibt es ein erheblich Leistungs Kosten diese zusätzlichen Lookup? Sollten wir bitten, den Designer zurück zu gehen und manuell diese Dynamik zu Statiken ändern?

Dies ist eine große Frage SO, das den Unterschied zwischen den verschiedenen Arten erklärt: Was ist der Unterschied zwischen Static und Dynamic in WPF?

War es hilfreich?

Lösung

Leider ist dies ein Fall, in dem es sehr schwer, einen direkten Vergleich der relativen Performance seit dem Ort zu tun, wo ein Abbau auftauchen würde, ist tief in der WPF-Engine. In den frühen Tagen der WPF war die Verwendung von Static eine der Standard-Performance-Tuning Änderungen, die empfohlen wurde und wir neigten es ziemlich streng in unserer Organisation zu folgen und es anderen empfehlen. Ich war wirklich verärgert, dass Mischung Dynamische alles tat, obwohl das half ihm Ressourcen aus anderen Dateien ordnungsgemäß zu Entwurfszeit zu machen.

Im Laufe der Zeit auf diesem meine Ansicht geändert hat, wegen etwas auf persönliche Erfahrung, sondern auch Feedback von Leuten auf dem Blend-Team bei Microsoft. Wie Sie wahrscheinlich wissen, ist Mischung vollständig in WPF geschrieben und hat ein komplettes alternatives Thema (Licht), die im laufenden Betrieb umgeschaltet werden kann, während die Anwendung ausgeführt wird. Dies ist möglich, weil sie Dynamic für so ziemlich alle ihre Styling verwendet. Nach ihnen, dies nicht wirklich sie keine wirklichen perf Probleme verursachen. Da Blend ist wahrscheinlich die am weitesten verbreitete Anwendung von WPF in Existenz, neige ich dazu, erhebliches Gewicht, ihre Meinung zu geben.

Die andere Sache zu prüfen, ist tatsächlich Nutzen des Dynamic. Die Fähigkeit zur Veränderung im Fluge Styling ist ein Teil davon, sondern auch die Flexibilität, die es Ihnen Hierarchie beim Aufbau Ihrer Ressource gibt kann es viel einfacher macht gemeinsam genutzte Stile zu verwalten. Ich bin sicher, Sie haben in eine Situation führen, wo ein Static Bezug zur Laufzeit explodierte, weil die Ressource, die es zu spitz war in einem anderen Zweig der Hierarchie geladen werden.

Offensichtlich Static ist sehr nützlich für den Hinweis auf einen bestimmten Schlüssel, dass Sie wissen, wird zur richtigen Zeit zur Verfügung steht. Wenn Handschrift XAML Ich neigt dazu, es immer noch die ganze Zeit zu nutzen. Aber angesichts der Produktivität, die Sie von einem Designer XAML in Mischung erzeugen, die gewinnen aus, jeder kleiner Performance-Gewinn Sie erhalten können, ist wahrscheinlich nicht wert, die Overhead von Hand Aufrechterhaltung alles wie Static.

Andere Tipps

Es wird gesagt, einen Unterschied in der Leistung sein, sondern darum, ob es „signifikant“ wird davon abhängen, wie viele dynamischen Lookups geschehen. Es sei denn, Sie haben Tausende von Dynamic Referenzen ist es wahrscheinlich nicht spürbar sein werde so oder so; wenn dynamische Ressourcen, die viel schlechter als statische diejenigen durchgeführt, wie ich vermute Mischung wäre konservativere über sie zu erzeugen.

In der Tat, wenn ich einen naiven Test lief, fand ich das nicht eingängig Ergebnis, dass Dynamic ran schneller als Static (mit 3000 Ressourcenreferenzen, sah ich die Ladezeiten um 200 ms, wenn ich Dynamic für alles verwenden vs . um 400ms für Static).

Dies war ein unrealistischer Test aus zahlreichen Gründen: alle Verweise auf die gleiche Sache waren, war ich unter dem Debugger ausgeführt wird, etc. etc. Aber es legt nahe, wäre es verfrüht, Mühe in den Mischausgang zu ändern „just in Fall“- es kann nicht unbedingt die Schuld der Dynamic Referenzen und dass, wenn Sie Mitteilung eine Verlangsamung zu tun - immer messen

Leider, wenn Sie die dynamischen Ressourcen zurück zur Statik ändern, wird es Mischung brechen. Dies scheint gilt vor allem, wenn die Benutzersteuerelementen Referenz dynamische Ressourcen, wenn Sie sie ändern die Steuerung statisch nicht machen, wenn in einem anderen Steuerelement in Mischung statt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top