WPF DataGrid的性能问题

Son*_*oul 13 .net c# wpf performance

我正在测试WPF DataGrid,希望能够取代一些winforms控件,并且到目前为止对开发过程非常满意.性能似乎是我现在最关心的问题.我的开发工作站拥有运行Windows 7的市场上最好的CPU,有6台DDR3内存.我正在替换的窗口控件响应速度更快,这令人担忧.

我的测试是绑定到ObservableCollection的DataGrid的基本实现,它每秒更新一次.它还包括详细信息区域,可扩展以显示有关每行的更多信息.详细信息区域只是一个stackPanel,其中ItemsControl包装TextBlock(重复6次)

我的抱怨是,如果我尝试滚动此集合,它通常是滞后的,如果我尝试扩展每一行,大约15%的点击不会触发按钮单击事件(DataGridTmplateColumn> CellTemplate> DataTemplate>按钮)如果某些行细节被展开,滚动也会更加抖动(滚动条可以自动调整大小)

有什么东西可以寻找/优化/避免?

更新

以下是我发现有用的一些要点:

  • 尽可能少地依赖动态布局.因为每个组件包含许多子组件并且在动态布局世界中,所有组件都必须调用可以是cpu密集型的测量和布局方法.因此,不使用列宽Auto(或指定宽度),而是使用固定宽度

  • 安装WPF Performance Suite并与您的应用程序呈现方式保持联系.令人敬畏的应用程序

  • 正如Andrew所指出的那样,ListView是一个很好的选择,因为当你不需要高级DataGrid功能时,例如更新数据,或者可能是Details View(我仍然希望重现)

  • SuspendableObservableCollection是理想的,当你在很短的时间添加多个项目的期限(即0.01秒等100项)

  • 经过大量测试,我发现BindingList比ObservableCollection快得多.我在这里发布了由BindingList和Observable集合处理的相同负载的性能分析器快照,前者占用不到一半的CPU时间.(请记住,这不仅仅是收集性能,而是与ListView配对时)

我的搜索仍在继续,因为我的应用程序中的内存似乎正在泄漏内存,并在几小时后将其减慢到停止状态.

And*_*rew 1

您指的是 WPF Toolkit 中的 DataGrid 吗?如果是的话,我认为它非常慢,所以我最终使用了 ListView 和 GridView。