2009-06-17 16 views
5

Vorrei sapere perché in base a questo article e alla raccolta osservabile si associa significativamente più veloce (20 ms vs 1685ms, ovvero 800 volte più veloce) di una raccolta List <> in WPF. Ho guardato la struttura interna di ObservableCollection e utilizza un elenco di quanto è oggetto di raccolta stoccaggio (io ho usato il riflettore e ho visto questo nel costruttore)ObservableCollection Prestazioni di Databinding

public Collection() 
{ 
    this.items = new List<T>(); 
} 

Allora, cosa sta succedendo qui?

risposta

8

Il confronto in tale articolo non è tra due semplici operazioni vincolanti, tali misurazioni si riferiscono ad uno scenario in cui si aggiunge un singolo elemento a un WPF ListBox che è già legato sia ad un List<T> o un ObservableCollection<T>.

Come il commento dell'autore:

... CLR List<T> oggetto non solleva automaticamente un raccolta di eventi cambiato. Al fine di ottenere il ListBox a raccogliere i modifiche, si dovrà ricreare tua lista di dipendenti e ri-collegare alla ItemsSource proprietà del ListBox. Mentre questa soluzione funziona, lo introduce un enorme impatto sulle prestazioni. Ogni volta che si riassegnare il ItemsSource di ListBox a un nuovo oggetto, il primo ListBox butta via le sue precedenti oggetti e rigenera tutta la sua lista.

Questo spiega la differenza di prestazioni. Anche se ObservableCollection<T> è supportato da un List<T>, implementa l'interfaccia INotifyCollectionChanged, che rende inutili tutte le elaborazioni aggiuntive.

+2

Più precisamente INotifyCollectionChanged è implementato da ObservableCollection

+0

Grazie, Bryce - corretto. –

+0

Quindi, se abbiamo una lista di 1000 articoli e una ObservableCollection di 1000 articoli richiederebbero lo stesso tempo, giusto? Ha senso. – Jose