ObservableCollection Databinding performance 是一个关于性能的问题。在这篇文章中,作者比较了将单个项目添加到已绑定到 List 或 ObservableCollection 的 WPF ListBox 中时的性能差异。
作者指出,CLR 的 List 对象不会自动引发集合更改事件。为了让 ListBox 感知到这些变化,你需要重新创建员工列表并重新将其附加到 ListBox 的 ItemsSource 属性上。虽然这种解决方案可以工作,但会带来巨大的性能影响。每次重新分配 ListBox 的 ItemsSource 给一个新对象时,ListBox 都会丢弃其先前的项并重新生成整个列表。
这解释了性能差异。即使 ObservableCollection 是由 List 支持的,但它实现了 INotifyCollectionChanged 接口,这使得所有额外的处理都是不必要的。
更准确地说,INotifyCollectionChanged 是由 ObservableCollection 实现的。
所以,如果我们有一个包含 1000 个项目的 List 和一个包含 1000 个项目的 ObservableCollection,它们将需要相同的时间,对吗?这是有道理的。
如果我理解正确,这是正确的 - 在其他条件相同的情况下( 是相同类型,访问绑定属性时没有发生异常等),它们将需要相同的时间。