I would like to know why according to this article and observable collection binds significantly faster(20 ms vs 1685ms, that\'s 800X faster) than a List<> collection in
The comparison in that article isn't between two simple binding operations, those measurements refer to a scenario in which you add a single item to a WPF ListBox
that is already bound to either a List<T>
or an ObservableCollection<T>
.
As the author remarks:
...the CLR
List<T>
object does not automatically raise a collection changed event. In order to get theListBox
to pick up the changes, you would have to recreate your list of employees and re-attach it to theItemsSource
property of theListBox
. While this solution works, it introduces a huge performance impact. Each time you reassign theItemsSource
ofListBox
to a new object, theListBox
first throws away its previous items and regenerates its entire list.
This explains the performance difference. Even though ObservableCollection<T>
is backed by a List<T>
, it implements the INotifyCollectionChanged
interface, which renders all that extra processing unnecessary.