Leider ist dies ein Fall, in dem es sehr schwierig ist, einen direkten Vergleich der relativen Leistung durchzuführen, da der Ort, an dem eine Verschlechterung auftreten würde, tief in der WPF-Engine liegt. In den frühen Tagen von WPF war die Verwendung von StaticResource eine der empfohlenen Standard-Performance-Tuning-Änderungen, die wir in unserer Organisation tendenziell sehr streng befolgten und anderen empfehlen. Ich war wirklich genervt, dass Blend Dynamic alles gemacht hat, obwohl es dazu beigetragen hat, dass Ressourcen von anderen Dateien zur Entwurfszeit richtig gerendert wurden.
Im Laufe der Zeit hat sich meine Sichtweise geändert, was zum Teil auf persönliche Erfahrungen zurückzuführen ist, aber auch auf Rückmeldungen von Leuten aus dem Blend-Team von Microsoft. Wie Sie wahrscheinlich wissen, ist Blend vollständig in WPF geschrieben und hat ein komplettes alternatives Theme (Light), das während der laufenden Anwendung gewechselt werden kann. Dies ist möglich, weil sie DynamicResource für fast alle ihrer Stile verwendet haben. Ihrer Meinung nach hat ihnen das nicht wirklich Probleme bereitet. Angesichts der Tatsache, dass Blend wahrscheinlich die am häufigsten verwendete WPF-Anwendung ist, tendiere ich dazu, ihren Ansichten ein erhebliches Gewicht zu geben.
Die andere Sache zu berücksichtigen ist die tatsächliche Nützlichkeit von DynamicResource. Die Möglichkeit, das Design im Handumdrehen zu ändern, ist ein Teil davon, aber auch die Flexibilität, die es beim Erstellen Ihrer Ressourcenhierarchie bietet, kann die Verwaltung gemeinsam genutzter Stile erheblich vereinfachen. Ich bin sicher, dass Sie in eine Situation geraten sind, in der eine StaticResource-Referenz zur Laufzeit explodiert ist, weil die Ressource, auf die sie zeigte, in einen anderen Zweig der Hierarchie geladen werden sollte.
Offensichtlich ist StaticResource sehr nützlich, um auf einen bestimmten Schlüssel zu zeigen, von dem Sie wissen, dass er zur richtigen Zeit verfügbar sein wird. Wenn ich XAML handschriftlich schreibe, tendiere ich immer noch dazu, es ständig zu benutzen. Aber angesichts der Produktivität, die Sie daraus ziehen, dass ein Designer Ihr XAML in Blend erstellt, ist jeder kleine Leistungsgewinn, den Sie erhalten, wahrscheinlich nicht den Aufwand wert, alles manuell als Statisch zu verwalten.
In Bezug auf Ihre Aussage "Offensichtlich StaticResource ist sehr nützlich für das Zeigen auf einen bestimmten Schlüssel Sie wissen, dass es zur richtigen Zeit verfügbar sein wird. " Bedeutet dies, dass eine DynamicResource die Überprüfung der Kompilierungstypen verliert und zur Laufzeit verschoben wird? – scobi
Ja. In den meisten Fällen erhält eine DynamicResource-Referenz, die nicht aufgelöst wird, nur einen Standardwert (wie Schwarz für Pinsel) und wartet darauf, dass der gesuchte Schlüssel angezeigt wird. Es gibt keine Möglichkeit für den Compiler, diese Situation selbst zu überprüfen. –
Das war sehr hilfreich, danke !! –