数据网格绑定(WPF)导致UI延迟

use*_*068 2 c# wpf multithreading dispatcher

我希望能够以快速的速度向数据网格添加项目,而不会导致UI延迟.

这是我现在正在做的事情:我正在使用绑定到数据网格的ObservableCollection.

我使用后台线程,只有在从observable集合中插入/删除时,才会循环并调用当前调度程序上的Invoke.调用BeginInvoke会产生不良结果.

我知道在调度员上调用那么多导致延迟,但我不知道还能做什么.我之前使用过背景工作者,但我认为这不适用于我的场景.

我该怎么做才能保持用户界面的响应速度?

cor*_*erm 8

批量更新 - 后台线程可以将项添加到队列中,您可以通过调用定期刷新绑定的可观察集合.如果需要处理多线程生成器,请查看System.Collections.Concurrent命名空间


Gre*_*som 6

您的设计的一个主要缺点是,通过绑定到ObservableCollection,您将导致UI呈现每个被添加到列表中的项目(可能是数千个) - 即使在处理结束时只需要10个项目渲染.

这样的UI永远只需要处理10个项目 - 我改变的ObservableCollection到列表,并在处理结束手动刷新DataGrid中看到了巨大的改进.我发现这种变化导致50%的性能提升,并且在处理List时允许UI 100%响应.

如果您要处理列表很长时间,并且需要显示实时更改,则可以每100个项目刷新一次DataGrid.这将显示约0.5秒精度的结果,该精度应足够接近.