.NET 5 WPF Flexgrid的性能对比
本帖最后由 Richard.Ma 于 2021-5-21 17:37 编辑在开发UI控件时,性能是我们考虑的关键指标之一。我们致力于不断寻找更好的策略来改善每个控件的性能。在.NET 5中,我们对C1 WPF的FlexGrid进行了重新评估和重新设计,以克服我们在先前版本中发现的一些瓶颈。这篇博客介绍了我们的.NET 5数据网格控件FlexGrid,并将其性能与市场上的其他WPF数据网格控件进行了比较。
背景衡量数据网格性能时两个最重要方面是加载和滚动。滚动性能通常更为重要,因为加载仅发生一次,但滚动却在使用过程中不断发生,这使用户更容易感受到。当然,负载也很重要,因此将这两个方面共同解决以找到合适的平衡非常重要。由于数据网格必须支持显示包含数百万个项目的大型数据集,因此就加载时间和内存消耗而言,为每个项目创建单元格是不切实际的。而使用一种称为UI虚拟化的技术,该技术仅显示用户可以看到的内容。当用户滚动网格时,将在下面自动创建并显示ViewPort,从而使用户感觉它已经存在。UI虚拟化对于优化加载性能是有益的,也是必需的。但是它并不能解决滚动时的问题。重新创建视觉树来在每次滚动事件发生时(频繁且短暂的时间间隔)显示新元素仍是必须的。这意味着快速布局以尽快显示ViewPort中的所有单元格至关重要。由于创建单元并将其添加到可视树需要花费大量时间,因此回收单元格将有助于我们减少计算布局所需的时间。另一方面,UI虚拟化并不能解决所有问题。如果我们使用巨大的数据源,则行集合将具有与源中的项目一样多的行,并且仅创建此数量的对象会带来加载时间的损失。为避免这种情况,我们实现了模型虚拟化技术,该技术可以延迟创建列和行,直到需要它们为止。
测试数据为了进行性能比较,我们测试了我们的三个WPF数据网格控件,并将它们与Microsoft数据网格进行了比较。测试的四个数据网格为:
[*]WPF的Microsoft DataGrid(.NET 5)
[*]WPF的ComponentOne FlexGrid(.NET Framework 4.5.2)
[*]WPF的ComponentOne 旧版本C1DataGrid(.NET Framework 4.5.2)
[*]WPF的ComponentOne FlexGrid(.NET 5)
在.NET 5应用程序中测试了这些数据网格,以确保每个数据网格显示相同数量的单元格。结果是多次测试的平均值。请参阅下面的数据,以查看滚动和加载1,000行,10,000行,100,000行和1百万行时的初始结果。
滚动性能https://global-cdn.grapecity.com/blogs/componentone/20210512-analyzing-net-wpf-datagrid-performance-benchmarks/1-scrolling-performance.png
加载性能https://global-cdn.grapecity.com/blogs/componentone/20210512-analyzing-net-wpf-datagrid-performance-benchmarks/2-loading-performance.png
结论上述性能比较可以得出以下结论:
[*].NET 5 FlexGrid的滚动性能比Microsoft DataGrid快3倍,比WPF .NET Framework 4.5.2以前版本快1.8倍。
[*].NET 5FlexGrid的加载性能是比微软的DataGrid快3.2倍,,比C1DataGrid快2.3倍在小数据量的情况下和4.5.2的FlexGrid非常相似
.NET 5 FlexGrid现在对于任何数量的行都具有最一致的性能,并且在每种情况下均显示最快的加载和滚动时间。它修复了.NET Framework中发现的有关通过模型虚拟化实现加载大型数据源的问题。
页:
[1]