ObservableCollection 数据绑定性能

发布于 2024-07-25 09:12:02 字数 350 浏览 8 评论 0原文

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

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

那么这里发生了什么?

I would like to know why according to this article and observable collection binds significantly faster(20 ms vs 1685ms, that's 800X faster) than a List<> collection in WPF. I looked at the internals of ObservableCollection and it uses a List as it's storage collection object(I used reflector and saw this in the constructor)

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

So what's going on here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

绾颜 2024-08-01 09:12:02

该文章中的比较不是在两个简单的绑定操作之间进行的,这些测量是指将单个项目添加到已经绑定到 List<; 的 WPF ListBox 的场景。 T>ObservableCollection

正如作者所说:

...CLR List 对象
不会自动引发
集合更改事件。 为了
获取 ListBox 来选取
更改,您将必须重新创建
您的员工名单并重新附加
它的 ItemsSource 属性
列表框。 虽然这个解决方案有效,但它
引入了巨大的性能影响。
每次重新分配 ItemsSource
ListBox 到一个新对象,
ListBox 首先扔掉之前的内容
项目并重新生成其整个列表。

这解释了性能差异。 尽管 ObservableCollectionList 支持,但它实现了 INotifyCollectionChanged 接口,这使得所有额外处理都变得不必要。

The comparison in that article isn't between two simple binding operations, those measurements refer to a scenario in which you add a single item to a WPF ListBox that is already bound to either a List<T> or an ObservableCollection<T>.

As the author remarks:

...the CLR List<T> object
does not automatically raise a
collection changed event. In order to
get the ListBox to pick up the
changes, you would have to recreate
your list of employees and re-attach
it to the ItemsSource property of the
ListBox. While this solution works, it
introduces a huge performance impact.
Each time you reassign the ItemsSource
of ListBox to a new object, the
ListBox first throws away its previous
items and regenerates its entire list.

This explains the performance difference. Even though ObservableCollection<T> is backed by a List<T>, it implements the INotifyCollectionChanged interface, which renders all that extra processing unnecessary.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文