C# 是否向其他类别提供测量数据(从串行端口)?
我有一个通过虚拟COM端口连接的设备。该装置每100ms发送一次测量数据。有多个通道可以单独(取消)激活,这会影响发送哪些数据/哪些通道 目前,我通过类型为C# 是否向其他类别提供测量数据(从串行端口)?,c#,.net,data-structures,C#,.net,Data Structures,我有一个通过虚拟COM端口连接的设备。该装置每100ms发送一次测量数据。有多个通道可以单独(取消)激活,这会影响发送哪些数据/哪些通道 目前,我通过类型为Dictionary的事件提供数据。字符串是通道的名称,double是值。第一个“通道”是来自设备的时间戳。需要数据的类只是订阅事件 图表(显示在主窗口中)和某些其他类需要这些数据,这些类偶尔需要最后n个值来执行几项检查(最小值/最大值/平均值…) 当然,我觉得大约每100毫秒触发一次事件是向应用程序的其他部分提供测量数据的一种非常无效的方式
Dictionary
的事件提供数据。字符串是通道的名称,double是值。第一个“通道”是来自设备的时间戳。需要数据的类只是订阅事件
图表(显示在主窗口中)和某些其他类需要这些数据,这些类偶尔需要最后n个值来执行几项检查(最小值/最大值/平均值…)
当然,我觉得大约每100毫秒触发一次事件是向应用程序的其他部分提供测量数据的一种非常无效的方式(尤其是重新绘制图表)。这是一个很好的替代方案吗
如果是这样,DataTable对于“未指定”值的行为如何,例如,当给定时间戳的通道未激活(因此,设备未发送)时,数据中存在“漏洞”?想象一下,它可能是这样的
Time | Ch1 | Ch2 | Ch3 | ...
------+-------+-------+-------+
0 | 34 | | |
1 | 35 | | |
2 | 36 | | |
3 | 35 | | 23 |
4 | 36 | 11 | 26 |
5 | 37 | 13 | 26 |
6 | | 14 | 21 |
7 | | 13 | 25 |
8 | | 16 | |
9 | | 14 | |
10 | | 22 | |
11 | | 24 | |
12 | | 24 | 45 |
13 | 37 | 27 | 44 |
14 | 36 | | 46 |
15 | 35 | | |
16 | 33 | | |
17 | 32 | 30 | |
18 | 23 | 32 | |
还有其他替代方案吗?在您的示例中,在时间5时,通道1的值为37。在时间6,没有报告通道1的值。你有三个选择:
n
项中维护运行的最小值/最大值/平均值是一种非常标准的技术,只需要很少的处理
这样做可能需要更大的内存占用,但不应该太大。事实上,与数据表的每行开销相比,它甚至可能更便宜。其好处是,每个类都以最适合该类功能的格式维护它所需的数据
我在多年前编写的一个网络爬虫应用程序中使用了这项技术,效果非常好。每个类都会收到下载的每个文档的通知,以及统计信息(所用时间、大小等),每个类都会在屏幕上显示这些信息,让我了解爬虫程序的工作方式。爬虫程序以每秒15个文档的速度下载,因此我以大约每66毫秒一个事件的速度触发事件,而机器在这方面没有问题。谢谢,特别是提到通过计时器更新图表。这很可能是最昂贵的操作,每100毫秒执行一次也毫无意义!