请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

Richard.Ma 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-5-21 17:32  /   查看:177  /  回复:0
本帖最后由 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百万行时的初始结果。

滚动性能

加载性能

结论
上述性能比较可以得出以下结论:
  • .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中发现的有关通过模型虚拟化实现加载大型数据源的问题。

0 个回复

您需要登录后才可以回帖 登录 | 立即注册