可观察集合中的事务支持

时间:2010-02-12 16:21:43

标签: c# wpf performance

我感兴趣的是以最有效的方式更改可观察集合,只触发了一个属性更改。让我们说我想用3个项目填充列表,没有addCollection方法或类似的东西,所以我必须做清楚+ 3次添加。我是否需要创建不同的可观察集合并分配?或者别人使用什么技术?

1 个答案:

答案 0 :(得分:2)

.NET Framework的ObservableCollection类在每个项目添加到集合时发送单独的通知,并且不提供AddRange类型功能的机制。但是,您可以非常轻松地创建自己的集合,以实现INotifyCollectionChanged并发送您喜欢的任何通知。

您可能遇到的问题是INotifyCollectionChanged接口包括指定在单个消息中将多个项目添加到集合中的功能,但没有标准的.NET Framework类实际创建这些通知。因此,一些第三方和开源控件在收到添加通知时只添加了一个项目。即使是内置的.NET Framework类也可能有与此相关的未发现的错误。

出于这些原因,我建议您的自定义集合有一种模式,可以将其设置为始终在AddRange结束时发送重置通知,而不是单个多项添加通知。您可以通过发送多个单项添加通知或重置通知来进一步优化此项,具体取决于实际添加的项目数。

当然,在某些情况下,用新的ObservableCollection替换{{1}}同样容易。有时,这将比循环Add()效率低得多,因为重建了事件处理程序和CollectionView。其他时候,如果集合很大并且您的循环一次只添加几个项目,它将更有效。 有时它根本不起作用。