Erstellt jede Referenz auf ein ResourceDictionary eine neue Instanz oder haben ResourceDictionaries einen Caching-Mechanismus

10

Ich habe einen Code wie diesen

%Vor%

erscheint mehrmals in meiner Anwendung (manchmal als C # und manchmal als äquivalentes XAML). Enthält jede Instanz separate Instanzen von jeder ihrer Ressourcen oder gibt es einen Caching-Mechanismus im Hintergrund, der diese Ressourcen über alle Ressourcenwörterbücher verteilt?

Ich versuche zu entscheiden, ob ich die Ressourcenwörterbücher effizient nutzen muss (zB: bestimmte Instanzen teilen) oder ob diese Optimierung bereits von WPF behandelt wird.

    
Cameron Peters 20.12.2012, 05:10
quelle

2 Antworten

5

Wenn ich Ihre Frage verstehe, dann lautet die Antwort: Sie werden nicht zwischen verschiedenen ResourceDictionary -Instanzen "zwischengespeichert": Eine Instanz von ResourceDictionary wird nicht irgendeine Ressource des gleichen Typs verwenden / Schlüssel, der bereits in einem anderen ResourceDictionary instanziiert wurde. Dies steht natürlich im Gegensatz zu Schlüsseln in einem einzelnen ResourceDictionary ; Jeder dieser Einträge wird tatsächlich "zwischengespeichert", in dem Sinne, dass sie einmal erstellt und geteilt werden (mit Ausnahme für Ressourcen vom Typ Wert, die bei jeder Verwendung kopiert werden).

Sie müssen also den Umfang Ihrer Ressourcen verwalten, wenn sie speicherintensiv sind. Sie können jede Ressource immer in Ihr Hauptverzeichnis App.xaml stellen, wodurch sichergestellt wird, dass jeder Eintrag einmal instanziiert und für alle seine Benutzer freigegeben wird. Beachten Sie, dass die Ressourcen lazy-loaded sind:

  

Die Elemente in einem ResourceDictionary werden nicht sofort verarbeitet, wenn der Anwendungscode von einem XAML-Loader geladen wird. Stattdessen bleibt das ResourceDictionary als Objekt bestehen, und die einzelnen Werte werden nur verarbeitet, wenn sie speziell angefordert werden.

Sie müssen sich also nicht darum kümmern, dass Ihre Anwendung beim Starten die Ressourcen in App.xaml lädt all ; es lädt sie nur nach Bedarf.

    
McGarnagle 20.12.2012, 05:40
quelle
1

Um ein Wörterbuch zu haben, das nicht für jede Verwendung instanziiert wird

%Vor%

Für die Ressourcen selbst können Sie mit dem x: shared-Attribut

spielen     
Andreas 19.04.2016 12:21
quelle