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

时间:2011-03-02 23:07:41

标签: c# wpf multithreading dispatcher

我希望能够快速将项目添加到数据网格,而不会导致UI延迟。

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

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

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

我可以做些什么来保持用户界面的响应能力?

2 个答案:

答案 0 :(得分:8)

批量更新 - 后台线程可以将项添加到队列中,您可以通过调用定期刷新绑定的可观察集合。如果需要处理多线程生成器

,请查看System.Collections.Concurrent命名空间

答案 1 :(得分:6)

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

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

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