没有虚拟化的 WPF DataGrid 性能

     2023-02-22     50

关键词:

【中文标题】没有虚拟化的 WPF DataGrid 性能【英文标题】:WPF DataGrid Performance without virtualization 【发布时间】: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 更快。 好吧,不幸的是我需要分组、排序和编辑。 为什么您认为不需要虚拟化? 【参考方案1】:

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

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

【讨论】:

如何提高非虚拟化 DataGrid 的排序性能?

】如何提高非虚拟化DataGrid的排序性能?【英文标题】:HowtoimproveSortingperformanceonaNone-VirtualizedDataGrid?【发布时间】:2011-09-0116:10:21【问题描述】:我相信你们中的大多数人现在会惊讶于为什么我们必须关闭wpf数据网格的虚拟化。... 查看详情

WPF DataGrid DataContext 极慢

...际看到数据显示在DataGrid中的时间长度约为3-4秒。打开行虚拟化会快一点,但我不得不将其关闭 查看详情

带有分组的 WPF DataGrid 虚拟化

】带有分组的WPFDataGrid虚拟化【英文标题】:WPFDataGridVirtualizationwithGrouping【发布时间】:2010-12-0109:55:32【问题描述】:我正在使用WPFDataGridfromCodePlex,我需要让虚拟化与分组一起工作。此question是主题并指向MSDNExample,但它仅涵盖... 查看详情

wpf下datagrid的性能是不是很差

参考技术A确实是比较差的 查看详情

如何从头开始创建一个快速的 WPF Datagrid 控件?

】如何从头开始创建一个快速的WPFDatagrid控件?【英文标题】:HowtocreateafastWPFDatagridcontrolfromscratch?【发布时间】:2011-07-2301:14:58【问题描述】:过去我一直在使用许多商业WPF数据网格,我必须说性能非常令人失望且缓慢。我希望... 查看详情

WPF 数据网格性能

...个固定列和标题是固定的。)水平和垂直滚动都非常慢。虚拟化已打开,我已在xaml中显式启用列虚拟化和行虚拟化。有什么需要注意的会真正影响性能,例如绑定方法,或者每个单元格模板中的xaml是什么?需要注意的 查看详情

WPF:将 DataGrid 放入 ComboBox

】WPF:将DataGrid放入ComboBox【英文标题】:WPF:PuttingaDataGridinaComboBox【发布时间】:2013-02-0317:55:25【问题描述】:在WPF中,如何将DataGrid放入ComboBox以显示多列?像下面这样的东西似乎没有做任何事情:<ComboBox><ItemsPanelTemplate&... 查看详情

wpf程序性能

...次。这可以保证第内存使用,而改变渲染性能。2、 UI虚拟化:只显示当前需要显示的元素.3、 不要把不要显示的自定义控件隐藏在主界面中:虽然它们不会显示出来, 查看详情

如何在 WPF Datagrid 上启用滚动条?

】如何在WPFDatagrid上启用滚动条?【英文标题】:howcanIenablescrollbarsontheWPFDatagrid?【发布时间】:2010-10-1423:35:39【问题描述】:当我从thisarticle运行以下NorthwindWPFToolkitDatagrid代码时,我得到了一个数据网格,但没有没有滚动条,因... 查看详情

Datagrid行选择事件,WPF

】Datagrid行选择事件,WPF【英文标题】:Datagridrowselectionevent,WPF【发布时间】:2014-03-1822:22:54【问题描述】:我对数据网格做了一个简单的数据绑定。现在我想在数据网格中单击行时获取相关的行数据(整行数据)。由于没有行... 查看详情

在wpf中使用datagrid如何实现行冻结的功能

参考技术A对于datagrid来说冻结列主要用来固定某列在CanUserReorderColumns="True"的情况下不和其它列进行重新排序。而行本身就没有Reorder的功能,所以就没有行冻结之说。不知道提问者想实现怎样的效果?追问我就是想实现冻... 查看详情

提高 WPF 数据网格性能

】提高WPF数据网格性能【英文标题】:ImproveWPFDataGridperformance【发布时间】:2012-11-2517:16:01【问题描述】:在我的.NET3.5WPF应用程序中,我有一个WPFDataGrid将填充500列和50行。App在滚动,或者DataGrid.Items.Refresh()或选择行时的性能非... 查看详情

(WPF Datagrid)如何确定项目的列索引

】(WPFDatagrid)如何确定项目的列索引【英文标题】:(WPFDatagrid)HowdoIdeterminetheColumnIndexofanItem【发布时间】:2011-06-1816:48:58【问题描述】:当我单击一个单元格时,如何返回WPF数据网格中项目的列索引我正在使用VisualStudio2010/VB.Net... 查看详情

WPF MvvM DataGrid 动态列

】WPFMvvMDataGrid动态列【英文标题】:WPFMvvMDataGridDynamicColumns【发布时间】:2011-03-0504:36:14【问题描述】:我正在搜索如何以MvvM方式从ToolKit动态创建DataGrid的列。但看起来不可能!有没有人必须做同样的事情?不需要创建用户控件... 查看详情

在 WPF 中为 DataGrid 缩小列的宽度

】在WPF中为DataGrid缩小列的宽度【英文标题】:ShrinkingthewidthofacolumninWPFforDataGrid【发布时间】:2011-11-0202:37:25【问题描述】:我的第一行看起来像这样:Title1234567...如果我选择ColumnWidth="Auto"它的大小正确,但列之间的空间太大。... 查看详情

WPF DataGrid 自定义行标题

】WPFDataGrid自定义行标题【英文标题】:WPFDataGridCustomRowHeader【发布时间】:2017-01-2515:44:25【问题描述】:我正在使用WPF/EntityFramework/MVVM开发数据库前端现在,当我允许用户将数据添加到数据网格(绑定到可观察集合)时,我被... 查看详情

WPF Datagrid 到 XML [关闭]

】WPFDatagrid到XML[关闭]【英文标题】:WPFDatagridtoXML[closed]【发布时间】:2021-02-1208:28:02【问题描述】:我需要一个实际的帮助。我正在尝试在wpf中编写用户可编辑的数据网格。我已经完成了大部分工作,但我坚持将数据网格保存... 查看详情

WPF Datagrid 模板列编辑事件和交替列颜色

】WPFDatagrid模板列编辑事件和交替列颜色【英文标题】:WPFDatagridTemplatecolumnediteventandalternatingcolumncolor【发布时间】:2011-04-2123:55:57【问题描述】:我一直在使用WPF来保持安静。我知道WPF中的DataGrid没有Column集合作为依赖属性,因... 查看详情