5

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

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

那么这里发生了什么?

4

1 回答 1

8

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

正如作者所说:

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

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

于 2009-06-17T15:37:21.167 回答