Domanda

Il nostro designer sta usando Miscela per lo stile la nostra applicazione WPF. Quando sceglie le risorse locali per le proprietà, Miscela li applicare come {DynamicResource} invece di un {StaticResource}. La mia ipotesi è che si fondono fa questo perché consente l'applicazione per essere ri-tema in fase di esecuzione, senza dover riavviare.

La mia domanda è: esiste un costo significativo delle prestazioni di questa ricerca supplementare? Dovremmo chiedere al progettista di tornare indietro e modificare manualmente quelle dinamiche di Statica?

Ecco una domanda eccezionale e che spiega la differenza tra i tipi: Qual è la differenza tra StaticResource e DynamicResource in WPF?

È stato utile?

Soluzione

Purtroppo questo è un caso in cui è molto difficile fare un confronto diretto della performance relativa dal momento che il luogo in cui ogni degrado rivelerebbe è profondo nel motore WPF. Nei primi giorni di WPF l'uso di StaticResource è stato uno dei cambiamenti ottimizzazione delle prestazioni standard, che è stato consigliato e ci tendeva a seguire abbastanza rigorosamente nella nostra organizzazione e consiglio ad altri. Ero davvero infastidito dal fatto che Miscela fatto dinamico tutto ciò, anche se questo ha aiutato a rendere le risorse da altri file correttamente in fase di progettazione.

Nel corso del tempo mio punto di vista su questo è cambiato, a causa un po 'di esperienza personale, ma anche un feedback da persone del team Miscela di Microsoft. Come probabilmente sapete, Miscela è scritto completamente in WPF e ha un tema alternativo completo (Light) che può essere cambiata al volo, mentre l'applicazione è in esecuzione. Questo è possibile perché hanno usato DynamicResource per praticamente tutto il loro stile. Secondo loro, questo in realtà non causare loro problemi reali perf. Dato che Blend è probabilmente il più usato un'applicazione WPF in atto, tendo a dare peso significativo ai loro punti di vista.

L'altra cosa da considerare è effettiva utilità di DynamicResource. La possibilità di cambiare lo stile al volo è una parte di esso, ma anche la flessibilità ti dà nel costruire la vostra gerarchia delle risorse può rendere molto più facile da gestire stili condivisi. Sono sicuro che hai esegue in una situazione in cui un riferimento StaticResource fatto saltare in aria in fase di esecuzione perché la risorsa è puntato doveva essere caricata in un ramo diverso della gerarchia.

Ovviamente StaticResource è molto utile per puntare a una chiave specifica che si sa sta per essere disponibili al momento giusto. Quando XAML-scrittura a mano ho ancora tendono ad utilizzare tutto il tempo. Ma data la produttività si guadagna da avere un designer di generare il vostro XAML in Blend, qualsiasi piccola prestazioni guadagno si potrebbe ottenere è probabilmente non vale il sovraccarico di tutto, il mantenimento di mano come statico.

Altri suggerimenti

Ci si dice che sia una differenza di prestazioni, ma se si tratta di "significativo" dipenderà da quanti ricerche dinamiche stanno accadendo. A meno che non si dispone di migliaia di riferimenti DynamicResource non è destinata probabilmente ad essere evidente in entrambi i casi; se le risorse dinamiche eseguite che molto peggiori di quelli statici, ho il sospetto Miscela sarebbe più conservativo sulla generazione di loro.

In realtà, quando ho eseguito un test ingenuo, ho trovato il risultato controintuitivo che DynamicResource correva più veloce di StaticResource (con 3000 riferimenti di risorse, ho visto i tempi di caricamento intorno 200ms Quando ho usato DynamicResource per tutto vs . giro 400ms per StaticResource).

Questo è stato un test realistico per numerose ragioni: tutti i riferimenti erano la stessa cosa, stavo correndo nel debugger, ecc ecc Ma suggerisce che sarebbe prematuro impegnarsi nella modifica della destinazione di Blend "just in caso" - e che, se si nota un rallentamento potrebbe non essere necessariamente un difetto dei riferimenti DynamicResource -! misurare sempre

Purtroppo, se si modificano le risorse dinamici in statica, si romperà Blend. Questo sembra essere vero soprattutto quando si utilizzano controlli utente che fanno riferimento a risorse dinamiche, se si cambia loro di statico di controllo non renderà quando ospitata all'interno di un altro controllo in Blend.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top