Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可观测收集数据绑定性能_C#_Wpf_Data Binding_Collections_Observablecollection - Fatal编程技术网

C# 可观测收集数据绑定性能

C# 可观测收集数据绑定性能,c#,wpf,data-binding,collections,observablecollection,C#,Wpf,Data Binding,Collections,Observablecollection,我想知道为什么根据这个和可观察的集合绑定的速度要比WPF中的列表集合快很多(20毫秒比1685毫秒,快800倍)。我查看了ObservableCollection的内部结构,它使用一个列表作为其存储收集对象(我使用了reflector,并在构造函数中看到了这一点) 公共集合() { this.items=新列表(); } 那么这里发生了什么呢?这篇文章中的比较不是两个简单的绑定操作,这些度量指的是一个场景,在这个场景中,您将单个项添加到一个WPF列表框,该列表框已经绑定到一个列表或一个可观察到

我想知道为什么根据这个和可观察的集合绑定的速度要比WPF中的列表集合快很多(20毫秒比1685毫秒,快800倍)。我查看了ObservableCollection的内部结构,它使用一个列表作为其存储收集对象(我使用了reflector,并在构造函数中看到了这一点)

公共集合()
{
this.items=新列表();
}

那么这里发生了什么呢?

这篇文章中的比较不是两个简单的绑定操作,这些度量指的是一个场景,在这个场景中,您将单个项添加到一个WPF
列表框
,该列表框已经绑定到一个
列表
或一个
可观察到的集合

正如作者所说:

…CLR
列表
对象 不会自动引发错误 集合已更改事件。为了 获取
列表框
以拾取 更改,则必须重新创建 您的员工名单并重新附上 将其添加到的
itemsource
属性中
列表框
。虽然这个解决方案有效,但它仍然有效 引入了巨大的性能影响。 每次重新分配
itemsource
对于新对象的
列表框
ListBox
首先丢弃它以前的 项目并重新生成其整个列表


这就是性能差异的原因。尽管
ObservableCollection
列表支持,但它实现了
INotifyCollectionChanged
接口,这使得所有额外的处理变得不必要。

更准确地说,INotifyCollectionChanged由ObservableCollectionSo实现,如果我们有一个1000个项目的列表和一个1000个项目的可观察集合,它们将花费相同的时间,对吗?这是有道理的。如果我理解正确,这是正确的-其他所有条件都相同(是相同的类型,访问绑定属性时没有发生疯狂的事情,等等),它们将花费相同的时间。
public Collection()
{
    this.items = new List<T>();
}