关键词:
【中文标题】没有虚拟化的 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集合作为依赖属性,因... 查看详情