ObservableCollection数据绑定性能

Jos*_*ose 5 c# data-binding collections wpf observablecollection

我想知道为什么根据这篇文章和可观察集合比WPF中的List <>集合明显更快地绑定(20毫秒vs 1685毫秒,比800倍快).我查看了ObservableCollection的内部,它使用List作为它的存储集合对象(我使用了反射器并在构造函数中看到了这个)

public Collection()
{
    this.items = new List<T>();
}
Run Code Online (Sandbox Code Playgroud)

那么这里发生了什么?

Jef*_*nal 8

该文章中的比较不是在两个简单的绑定操作之间进行的,这些测量是指将一个项目添加到ListBox已绑定到a List<T>或a的WPF的场景ObservableCollection<T>.

正如作者所说:

... CLR List<T>对象不会自动引发集合更改事件.为了获取ListBox更改,您必须重新创建您的员工列表并将其重新附加到该ItemsSource属性 ListBox.虽然此解决方案有效,但它会带来巨大的性能影响.每次重新分配时ItemsSourceListBox一个新对象时, ListBox先扔掉以前的项目,并重新生成整个列表.

这解释了性能差异.即使ObservableCollection<T>由a支持List<T>,它也实现了INotifyCollectionChanged接口,这使得所有额外的处理变得不必要.

  • 更准确地说,INotifyCollectionChanged由ObservableCollection <T>实现 (2认同)