我正在创建一个WPF应用程序,它在数据网格中显示数千条记录。我在ObservableCollection中异步加载来自外部源的数据,并将其绑定到数据网格。一整天都会有几个网格的添加和更新。
性能方面,ObservableCollection是否适合这类应用程序,或者我应该寻找ObservableDictionary或任何其他合适的集合?
发布于 2014-01-26 08:45:33
我已经将它用于实时显示多达10,000条记录,没有任何问题。一旦您开始操作这么多记录,瓶颈往往是算法选择和数据虚拟化(或缺乏虚拟化)的问题,而不是您使用的集合类。也就是说,如果你担心这一点,那么你可以尝试使用there's an article here with a WPF-decoupled ObservableCollection。
发布于 2014-01-27 06:23:30
DataGrid使用UI虚拟化,以便仅绘制在视口区域中可见的内容。这减少了创建的UI元素的数量,并因此使其在内存和性能上更好。但是,当您处理包含数千个项的ObservableCollections时,还应该考虑使用数据虚拟化技术。
我建议使用KIS (保持简单),并尝试最简单的方法:只使用.NET ObservableCollection。
如果你在更新过程中遇到了滞后的UI,你需要考虑尝试某种ObservableCollection,它允许在更新阶段阻止UI更新(以防你需要在短时间内更新大量项目的集合)。
如果你在滚动或选择时遇到UI滞后,或者你的内存太高,你也需要考虑数据虚拟化。
祝好运
发布于 2014-01-27 14:11:06
对于添加到其中的每个项,ObservableCollection都会通知视图,并且它不支持AddRange()方法。我推荐ObservableCollection的扩展类,它支持这个Answer中发布的AddRange()方法
此类将针对整个批量进行更新。而不是每一项。其余性能将由默认支持虚拟StackPanel的DataGrid负责
https://stackoverflow.com/questions/21357852
复制相似问题