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配对时)
我的搜索仍在继续,因为我的应用程序中的内存似乎正在泄漏内存,并在几小时后将其减慢到停止状态.