【问题标题】:Streaming data and updating screen in C#在 C# 中流式传输数据和更新屏幕
【发布时间】:2011-11-07 23:08:34
【问题描述】:

我正在处理串行端口上的数据流。波特率为 19200 kbps,留下一个 shot 时间(约 100 ms)来处理数据并将结果显示在屏幕上。

数据处理性能没有问题。主要问题是更新屏幕。应用程序规范需要我在表格视图中显示数据。此视图中的单元格上下文可能会根据它们指示的信息具有不同的颜色。例如红色表示错误,绿色或蓝色表示某些消息等。

目前,我正在使用 datagridview 来显示数据,因为它具有灵活的表格视图,并且它的单元格具有 ForeColor 属性来更改颜色。但是,与输入数据和处理速度相比,它太慢了。具体来说,当我在新数据到达时添加新行或从头开始删除旧行时。要添加和删除行,我使用 DGV.Rows.Add(...) 和 DGV.Rows.RemoveAt(...) 方法。

我考虑了两种方法:

1) 两个不同的线程用于处理数据和更新 UI。但是,由于数据处理比对 datagridview 的操作要快得多,因此数据会累积并最终减慢一切。

2) 处理数据并按顺序更新屏幕。这种情况下,每条消息处理完后,都会在屏幕上显示该消息(会添加到datagridview中),等屏幕更新后处理下一条。显然,这种方式降低了处理速度,这是不可取的。

所以,我想知道是否有更好的方法来处理这种情况......或者我是否没有为此目的在性能方面使用正确的控制。

谢谢。

【问题讨论】:

  • 打破它 - 有多少行/秒进入,有多少是用户能够(愿意)阅读? GUI 应该是用户自定义的。
  • 说大约 20 行/秒,用户也应该能够看到所有这些。
  • 但是没有人可以读取 20 行/秒。
  • 你是对的。但是,他/她可以向下或向上滚动输入数据。因此,数据应该可以滚动了。
  • 而且数据应该是静止的。我认为这需要历史数据的虚拟化视图。

标签: c# datagridview data-stream


【解决方案1】:

1 带有一些不会使 griview 落后的智能编程。我在这里运行一个显示实时财务更新的网格,并且我没有落后,并且该网格获得的数据比您的 19200 波特连接所持有的数据多 - 我几乎每秒获得多达 10.000 个数据项。我只是丢弃那些不明显的兴趣。优化网格呈现。获取一个替代网格(用于处理大量更新)。

【讨论】:

  • 如何将数据项添加到网格中?您是将其绑定到数据源,还是使用 Add 方法?基本上,就性能而言,使用 Add 或 Remove 方法以高数据速率处理数据是一个好主意吗?
  • 我不知道。我更新它们。网格上的项目是“固定的”(即很少更改)。单元格的内容发生变化。另外,我不使用标准网格 - Infragistics 对这种行为进行了更多优化。
  • 我的问题是添加新行并删除旧行。例如,我必须显示最后 1000 行(最新的),而视图应该看起来像一个数据流。
  • 啊。嗯,这也没有问题。您是否对行使用图形卡级缓冲区?这个提示对我来说有很大的不同。进入模板。
  • 你能解释一下吗?我不确定我是否完全得到了你。
猜你喜欢
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-20
  • 2017-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多