合适的ObservableCollection

时间:2014-01-25 23:59:06

标签: c# wpf observablecollection

我正在创建一个WPF应用程序,它在数据网格中显示数千条记录。我在ObservableCollection中异步加载来自外部源的数据并将其绑定到datagrid。整天将对网格进行一些添加和更新。

性能明智是ObservableCollection适合这种应用程序,还是我应该寻找ObservableDictionary或任何其他合适的集合?

3 个答案:

答案 0 :(得分:0)

我已将它用于实时显示多达10,000条记录而没有任何问题。一旦开始操作那么多记录,瓶颈往往是算法选择和数据虚拟化(或缺乏)的问题,而不是你使用的集合类。也就是说,如果你担心它,那么你可以尝试使用there's an article here with a WPF-decoupled ObservableCollection

答案 1 :(得分:0)

DataGrid使用UI虚拟化,以便仅绘制视图端口区域中可见的内容。 这减少了创建的UI元素的数量,从而使其在内存和性能方面更好。 但是,当您处理包含数千个项目的ObservableCollections时,您还应该考虑使用数据虚拟化技术。

我建议去KIS(保持简单)并继续尝试最简单的方法: 只需使用.NET ObservableCollection。

如果您在更新期间遇到滞后UI,则需要考虑尝试某种ObservableCollection,它允许在更新阶段阻止UI更新(如果您需要在短时间内更新大量项目中的集合)。

如果您在滚动或选择过程中遇到滞后的UI,或者内存太高,您还需要考虑数据虚拟化。

祝你好运

答案 2 :(得分:0)

ObservableCollection会针对添加到其中的每个项目通知View,并且它不支持AddRange()方法。我会推荐和扩展ObservableCollection的课程,该课程支持此Answer

中发布的AddRange()方法

此类会针对整个批量进行更新。而不是每个项目。其余的性能将由DataGrid负责,默认情况下支持Virtual StackPanel