在重度更新期间更新具有80列的网格时,GUI无响应

时间:2011-06-23 10:39:00

标签: c# winforms performance

我正在申请股票交易所的证券交易。它有来自其中一家供应商的实时市场供稿。我们正在处理工作线程的市场数据,在更新主GUI时,我们将这些数据编组到GUI线程。

让我更清楚地说明,有一个有80列的超网格(第三方网格视图),我们有大约40行具有相同的安全性,当市场数据出现波动时必须更新。我们能够处理10个消息/秒/安全性的市场频率。但除此之外,我们无法处理。当频率增加到25-30 msgs / sec /安全性时,GUI变得无响应。我们在设计和实施时遵循了最佳实践,但仍然无法处理高频率。我们正在执行关于工作线程/后台线程的所有非GUI特定工作,但仍然面临GUI挂起。请帮忙建议我解决这个问题的任何开箱即用的解决方案。出于安全原因,我不能放置代码段。

2 个答案:

答案 0 :(得分:0)

将网格组件切换为可以加倍缓冲和多线程的东西(我希望大多数数据在更新时保持静态),或者自己动手。滚动自己的声音是不可避免的:这种繁重的更新活动并不是网格控件最常见的用例。我开始寻找可以修改的开源代码的网格控件,例如: http://www.codeproject.comhttp://www.codeplex.com。选择什么取决于您的其他要求,唉。

答案 1 :(得分:0)

这里的关键是虚拟化一切 - 数据模型和网格之间的唯一交互应该是在需要绘制相关单元格时。为了做到这一点,你需要使用支持这种虚拟化的网格(我之前使用过Syncfusion网格来做到这一点,参见示例here)。

您还需要批量更新数据模型,以免过于频繁地阻止GUI线程。看看this question and answer