【发布时间】:2014-11-08 02:30:33
【问题描述】:
我从实现桌面应用程序的人手中接过C#代码以从串行端口读取实时数据并显示它在图表中(使用图表类)。
代码似乎可以运行,但是非常慢。它似乎每 4 秒更新一次图表(0.25Hz)。但是,我可以看到它是多线程的,并且没有延迟命令,所以我不明白为什么它运行这么慢。图表的更新会减慢它的速度吗?理想情况下,我希望达到 每秒 1000 个数据点 (1kHz),实时显示并保存到硬盘,其中每个数据点的大小约为 30 字节。
我花了几天时间理解代码,但是太繁琐了,全部写在一个文件中,没有 cmets。 我每秒读取 1000 个数据点的目标是否现实/可实现?
我也在考虑重新编写代码(而不是尝试修复它),因为它只有大约 2,500 行 长。任何提示将不胜感激。另外,如果我重写代码,哪种语言可能更适合这个应用程序?
【问题讨论】:
-
你是认真的吗? 30Bytes*1000data/sec 使用串口?不,一点都不现实!您可以根据需要重新编写代码,但您必须再次考虑您的规格,您能告诉我您的波特率是多少吗?
-
30 kB/s 真的这么多吗?目前波特率为38400。但会相应增加。我不太担心硬件。我想知道“常规”计算机(i7 3Ghz 8G ram)是否可以跟上实时图表显示和保存。
-
这是 30,000 字节/秒,即每秒 240,000 位。我见过的串行端口上的最高波特率是每秒 230,400 位,这仅略低于您所需的吞吐量。
-
顺便说一句,处理 30 字节的数据类型是什么?一定有一些数据处理吧?
-
您希望一次在图表上显示多少点?如果您想每秒用 1000 个(或很多)新点更新绘图,但删除最旧的 1000 个点,这不是问题。如果您在添加新点的同时保留旧点,最终您的应用程序将窒息。当您有 10k 或 20k 个点时,图表渲染会变得非常慢。
标签: c# multithreading charts serial-port real-time