C# 可观测收集数据绑定性能
我想知道为什么根据这个和可观察的集合绑定的速度要比WPF中的列表集合快很多(20毫秒比1685毫秒,快800倍)。我查看了ObservableCollection的内部结构,它使用一个列表作为其存储收集对象(我使用了reflector,并在构造函数中看到了这一点)C# 可观测收集数据绑定性能,c#,wpf,data-binding,collections,observablecollection,C#,Wpf,Data Binding,Collections,Observablecollection,我想知道为什么根据这个和可观察的集合绑定的速度要比WPF中的列表集合快很多(20毫秒比1685毫秒,快800倍)。我查看了ObservableCollection的内部结构,它使用一个列表作为其存储收集对象(我使用了reflector,并在构造函数中看到了这一点) 公共集合() { this.items=新列表(); } 那么这里发生了什么呢?这篇文章中的比较不是两个简单的绑定操作,这些度量指的是一个场景,在这个场景中,您将单个项添加到一个WPF列表框,该列表框已经绑定到一个列表或一个可观察到
公共集合()
{
this.items=新列表();
}
那么这里发生了什么呢?这篇文章中的比较不是两个简单的绑定操作,这些度量指的是一个场景,在这个场景中,您将单个项添加到一个WPF
列表框
,该列表框已经绑定到一个列表
或一个可观察到的集合
正如作者所说:
…CLR列表
对象
不会自动引发错误
集合已更改事件。为了
获取列表框
以拾取
更改,则必须重新创建
您的员工名单并重新附上
将其添加到的itemsource
属性中
列表框
。虽然这个解决方案有效,但它仍然有效
引入了巨大的性能影响。
每次重新分配itemsource
对于新对象的列表框
ListBox
首先丢弃它以前的
项目并重新生成其整个列表
这就是性能差异的原因。尽管
ObservableCollection
由列表支持,但它实现了INotifyCollectionChanged
接口,这使得所有额外的处理变得不必要。更准确地说,INotifyCollectionChanged由ObservableCollectionSo实现,如果我们有一个1000个项目的列表和一个1000个项目的可观察集合,它们将花费相同的时间,对吗?这是有道理的。如果我理解正确,这是正确的-其他所有条件都相同(是相同的类型,访问绑定属性时没有发生疯狂的事情,等等),它们将花费相同的时间。
public Collection()
{
this.items = new List<T>();
}