图形用户界面无响应,同时更新网格有80列在重新更新

问题描述:

我有一个应用程序是证券交易所证券交易。它有来自其中一个供应商的实时市场供应。我们正在处理有关工作线程的市场数据,在更新主GUI时,我们将这些数据封送到GUI线程。图形用户界面无响应,同时更新网格有80列在重新更新

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

+0

这显然是由经纪人引起的,他们没有足够快地阅读消息。你需要告诉他们他们需要做得更好。 –

+0

Soo ...这是80列,40行和25-30更新*每行*每秒?是对的吗?如果这样的话,正如汉斯所暗示的那样,除非你有某种超级经纪人可以接受并采取行动,否则大部分更新都是多余的!将每行的更新限制为更易于阅读的速度,并将所有其他更新转储。 –

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

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

您还需要将更新批量批处理到您的数据模型,以便您不会频繁地阻止GUI线程。看看this question and answer