【发布时间】: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