ObservableCollection数据绑定性能

16 浏览
0 Comments

ObservableCollection数据绑定性能

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

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

那么这里发生了什么?

0
0 Comments

ObservableCollection Databinding performance 是一个关于性能的问题。在这篇文章中,作者比较了将单个项目添加到已绑定到 List 或 ObservableCollection 的 WPF ListBox 中时的性能差异。

作者指出,CLR 的 List 对象不会自动引发集合更改事件。为了让 ListBox 感知到这些变化,你需要重新创建员工列表并重新将其附加到 ListBox 的 ItemsSource 属性上。虽然这种解决方案可以工作,但会带来巨大的性能影响。每次重新分配 ListBox 的 ItemsSource 给一个新对象时,ListBox 都会丢弃其先前的项并重新生成整个列表。

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

更准确地说,INotifyCollectionChanged 是由 ObservableCollection 实现的。

所以,如果我们有一个包含 1000 个项目的 List 和一个包含 1000 个项目的 ObservableCollection,它们将需要相同的时间,对吗?这是有道理的。

如果我理解正确,这是正确的 - 在其他条件相同的情况下( 是相同类型,访问绑定属性时没有发生异常等),它们将需要相同的时间。

0