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