【问题标题】:WPF DataGrid Performance without virtualization没有虚拟化的 WPF DataGrid 性能
【发布时间】:2014-08-02 23:36:56
【问题描述】:

我刚收到一个关于微软 PresentationFramework 的问题DataGrid

我有一个ObservableCollection<TestModel>TestModel 是一个具有 20 个 Int 属性的简单类……仅此而已。在我的测试中,我的ObservableCollection 中有 50 个条目。 所以总的来说我有 1000 个细胞(20*50)。所有这些单元格都会同时显示,因此实际上无法进行虚拟化。

这是我的网格:

<DataGrid AutoGenerateColumns="true" RowHeight="20" ItemsSource="{Binding DataGridModelSource}"/>

在我看来,要渲染的 1000 个单元格并不多……尽管根据我运行此测试的系统,渲染这 1000 个单元格需要大约 1 到 3 秒。很多,不是吗?

我对一些自定义 DataGrids 进行了相同的测试,例如来自 C1、Infragistics、Mindscape 或 DX 的测试,并且使用所有这些网格将这 1000 个单元格的渲染时间减少到大约 100 毫秒。

那么微软DataGrid 有什么意义呢?有什么方法可以提高性能吗?我错过了什么吗?

【问题讨论】:

  • 您确定 1-3 秒是渲染时间,而不是数据加载时间吗?肯定是很多,你有转换器,calcualtions?
  • 是的,我正在测量数据加载时间.. 大约 50 毫秒。我没有任何转换器或计算。那只是随机的 int 值,在文本块列中抛出。
  • DataGrid 很“重”,但 1-3 秒似乎很高。你需要编辑吗? ListView / GridView 更快。
  • 好吧,不幸的是我需要分组、排序和编辑。
  • 为什么您认为不需要虚拟化?

标签: c# wpf performance mvvm datagrid


【解决方案1】:

使用 BindingList (https://msdn.microsoft.com/en-us/library/ms132679%28v=vs.110%29.aspx) 代替 ObservableCollection。 问题是你必须自己实现分组、排序等,但它应该更快。

您可以做的其他事情是简化当前主题的样式。您可以使用https://wpfinspector.codeplex.com/ 来查找某些内容(即使它是默认的 Windows 主题)

【讨论】:

    猜你喜欢
    • 2017-11-30
    • 1970-01-01
    • 2010-12-01
    • 2011-11-16
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多