WPF工具包DataGrid滚动性能问题-为什么?我的(WPFToolkit)DataGrid存在性能问题。它包含大约1.000行(仅8列)并且滚动非常缓慢且滞后。此外,包含DataGrid的窗口的初始加载需要5-10秒。我做了一些研究(使用Google和StackOverflow),但除了打开UI虚拟化的建议之外找不到任何东西。但即使在明确允许滚动之后,它仍然很慢。我的DataGrid绑定到ICollectionView/CollectionViewSource。它是在XAML中定义的(列是明确定义的,不是自动生成的):...整个窗口的DataContext设置为包含DataGrid绑定到的ICollectionView的类的实例。我发现的每篇博客或论坛帖子都赞扬DataGrid的性能,所以我显然做错了一些事情。由于我是WPF的新手,尤其是DataGrid,所以我不知道如何改进它。有人对我有什么建议吗?您使用DataGrid的体验如何?我究竟做错了什么?编辑:只需按照此问题中的建议将所有列的宽度设置为“自动”。这并没有改变糟糕的滚动性能。另外,我没有使用DataGridTemplateColumns(只有一些DataGridTextColumns和两个DataGridComboBoxColumns)。Edit2:我使用Snoop查看我的应用程序。我所看到的表明虚拟化确实有效(只有19行,而不是一千行)。但是每行包含52个元素,所以这些加起来超过一千个元素。可能是个问题?太感谢了!DataGrid具有管理此行为的附加属性ScrollViewer.CanContentScroll。要获得平滑滚动,您需要将其设置为False。在终于花时间针对最新版本的WPF构建我的应用程序之后,滚动问题似乎已经完全消失了。因此,如果有人仍在使用DataGrid的工具包版本,只是“更新”到框架中包含的版本,您应该没问题。我仍然遇到使用.NET4.0的滚动性能问题。我做了什么-禁用虚拟化。我在DataGrid中将EnableRowVirtualization设置为“false”。这大大提高了滚动性能。我建议不要假设WPF提供的任何东西在所有情况下都有用。您的数据网格位于哪个容器中?例如-如果您将它放在滚动查看器中,数据网格将增长以显示每一行,从而有效地禁用虚拟化(并且滚动查看器会在发生这种情况时使其正常显示)。确保数据网格大小是有界的。它听起来确实像是虚拟化的东西,如果这个建议不起作用,请通过分析器运行您的应用程序以确保虚拟化正在发生。编辑:这是一个如何使用snoop(或者我想是mole)快速查看虚拟化是否正常工作的示例。http://blogs.msdn.com/jgoldb/archive/2008/03/25/quick-tips-to-improve-wpf-app-memory-footprint.aspx你可以尝试一个一个添加(或者一行一行添加)在数据网格项目中,并在每次添加后更新UI线程。通过这种方式,用户可以看到正在加载,并且看起来应用程序什么也没做。请在此处查看此方法的更详细描述就初始加载而言,我发现有必要扩展公共API以显着改善大量列的加载-我们正在谈论亚秒级。也就是说,我在滚动性能方面遇到了类似的问题,即使有500多列也很慢。在我派生的数据网格中设置列:varcolumns=newDataGridColumnCollection(true,dataGrid);for(inti=0;i!pivotTable.NullRows.Contains(i))//只有非空行.ToList();FixDataGridColumnCollection:以上是C#学习教程:WPFToolkitDataGridscrollingperformanceproblem–why?如果分享的内容对你有用,需要了解更多C#学习教程,希望你多多关注——publicDataGridColumnCollection(booldeferColumnChangeUpdates,DataGriddataGridOwner):这个(dataGridOwner){_DeferColumnChangeUpdates=deferColumnChangeUpdates;}publicDataGridColumnCollection(DataGriddataGridOwner){Debug.Assert(dataGridOwner!=null,"我们应该有一个有效的DataGrid");DisplayIndexMap=newList(5);_dataGridOwner=数据网格所有者;RealizedColumnsBlockListForNonVirtualizedRows=null;RealizedColumnsDisplayIndexBlockListForNonVirtualizedRows=null;RebuildRealizedColumnsBlockListForNonVirtualizedRows=true;已实现的列BlockListForVirtualizedRows=null;RealizedColumnsDisplayIndexBlockListForVirtualizedRows=null;RebuildRealizedColumnsBlockListForVirtualizedRows=true;}#regionProtectedOverridespublicvoidForceUpdate(){if(DisplayIndexMapInitialized){UpdateDisplayIndexForNewColumns(this,0);}InvalidateHasVisibleStarColumns();}protectedoverridevoidOnCollectionChanged(NotifyCollectionChangedEventArgse){switch(e.Action){caseNotifyCollectionChangedAction.Add:if(!_DeferColumnChangeUpdates){if(DisplayIndexMapInitialized){UpdateDisplayIndexForNewColumns(e.NewItems,e.NewStartingIndex);}InvalidateHasVisibleStarColumns();}休息;,如涉及侵权,请点击维权联系管理员删除,如需转载请注明出处:
