ObservableCollection数据绑定性能
我想知道为什么根据这篇文章和可观察集合比WPF中的List 集合明显更快地绑定(20毫秒vs 1685毫秒,这比800倍快)。 我查看了ObservableCollection的内部,它使用List作为它的存储集合对象(我使用了反射器并在构造函数中看到了这个)
public Collection() { this.items = new List(); }
那么这里发生了什么?
该文章中的比较不是在两个简单的绑定操作之间进行的,这些测量是指将一个项目添加到已绑定到List
或ObservableCollection
的WPF ListBox
的场景。
正如作者所说:
… CLR
List
对象不会自动引发集合更改事件。 为了让ListBox
获取更改,您必须重新创建员工列表并将其重新附加到ListBox
的ItemsSource
属性。 虽然此解决方案有效,但它会带来巨大的性能影响。 每次将ListBox
的ItemsSource
重新分配给新对象时,ListBox
首先抛弃其先前的项并重新生成其整个列表。
这解释了性能差异。 尽管ObservableCollection
由List
,但它实现了INotifyCollectionChanged
接口,这使得所有额外处理都不必要。