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