2010-03-08 12 views
8

Un progetto a cui sto lavorando soffre di alcuni problemi di prestazioni minori. Il nostro team sta eseguendo molti piccoli miglioramenti per ottenere maggiori guadagni in termini di prestazioni. Siamo riusciti ad aiutare l'applicazione con alcune modifiche più ovvie, e abbiamo cercato di legare i dati per fornire ulteriori miglioramenti. So che la modalità di associazione predefinita è TwoWay, ma la maggior parte dei nostri binding non richiede il binding TwoWay. Varrebbe la pena passare il nostro tempo e specificare esplicitamente la modalità come OneWay in cui abbiamo accettato l'impostazione predefinita?Esiste un vantaggio in termini di prestazioni quando si specifica esplicitamente il binding OneWay durante l'impostazione dei binding in WPF?

+0

Esistono alcune situazioni di associazione riconosciute da Microsoft per causare perdite di memoria come da questo errore: http://support.microsoft.com/kb/938416 – jeffora

risposta

4

Siamo spiacenti, la prima versione è sbagliata al 100% (grazie, @Jeffora). Lo tengo qui, altrimenti i commenti non hanno senso.

Un'associazione unidirezionale non ha bisogno di impostare una connessione con la sorgente per ascoltare le notifiche di modifica, quindi richiede meno memoria, ma per quanto riguarda la velocità, non immagino che ci sia una differenza .

Seconda versione: Entrambi i binding OneWay e TwoWay si abbonano all'origine per le modifiche, al fine di aggiornare la proprietà target. Quindi, la differenza di prestazioni è l'aggiornamento della proprietà di origine, che potrebbe avere un impatto, a seconda di ciò che il resto del software fa quando si verifica l'aggiornamento.

Se le prestazioni sono critiche e lo scenario non necessita di aggiornamenti target, l'utilizzo del binding OneTime potrebbe essere un'opzione.

Colgo l'opportunità di questa correzione per chiedere se hai profilato la tua app, al fine di trovare gli hotspot. La regola 80/20 (o evento 90/10) è abbastanza frequente, vale a dire una piccola quantità di account di codice per la maggior parte del tempo trascorso. Senza saperlo, gli sforzi di ottimizzazione potrebbero non ottenere alcun guadagno.

+0

Interessante. Quindi, se parliamo di diverse centinaia di questi binding, è pensabile che il cablaggio di quegli eventi di ascolto manchi dei cicli cpu durante la creazione della finestra. Quindi potrebbe essere che ci sia un problema di velocità e memoria, giusto? – Kilhoffer

+0

Corretto, stavo scontando il tempo necessario per questa configurazione della connessione, ma con migliaia di essi, potrebbero essere importanti. – Timores

+1

Un collegamento unidirezionale continua a ricevere l'origine per la notifica di modifica: non è un bind di una volta. – jeffora