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 the ListBox
to pick up the
changes, you would have to recreate
your list of employees and re-attach
it to the ItemsSource
property of the
ListBox
. While this solution works, it
introduces a huge performance impact.
Each time you reassign the ItemsSource
of ListBox
to a new object, the
ListBox
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.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…