安心海叶 发表于 2015-10-20 16:40:00

C1Chart实时刷新数据的问题

您好!求助:我们从外部设备实时获取了数据,1s大概100个数据,想将数据在Chart上实时更新显示出来。可能0.01s时刻获取1个数据,0.02s采样到1个数据,依次刷新Chart。我们使用DispatcherTimer采样显示到Chart的数据,发现2s中我们实际得到的数据是200左右,即使设置DispatcherTimer的Interval为0.01,显示到Chart上的数据却只有100左右的点,导致丢数据的情况。

我们不知道对于我们的这种情况,实时更新Chart的数据,是否不满足我们的需求。或者有什么方法可以解决Chart实时更新数据,但又不丢那么多数据的情况?

Alice 发表于 2015-10-20 17:18:00

回复 1楼安心海叶的帖子

非常感谢对该问题的反馈。
测试C1Chart的实时刷新,没有重现数据丢失的问题。
请参考随机安装示例:
\Documents\ComponentOne Samples\WPF\C1.WPF.Chart\CS\ChartSamples\Performance
LiveData文件。

希望对你的程序设计有帮助。

安心海叶 发表于 2015-10-21 09:39:00

回复 2楼Alice的帖子

我知道随机安装的示例代码,但是示例代码中,每0.2s才产生一个数据,而且是随机数,不涉及到任何其它因素的影响。现在我们的项目是外部设备采集到的数据,每0.01s会有一个数据,我们可以知道采集到这个数据的时间,精确到ms级。如果用示例代码中DispatcherTime来显示数据到Chart,就变成了采样,这个时间点才到一个数据,下个时间点采到另一个数据,并不是我们外设获取的全部数据,也就是本来有800个数据,实际画到Chart界面上的数据只有200个。因为DispatcherTime的时间间隔采样速度,远没有我们外设获取数据的速度快,即使把DispatcherTime的Interval改的很小,也是同样的情况。

所以我想请问,对于Chart,有没有其它的方法可以显示实时采集到的数据?

Alice 发表于 2015-10-21 13:54:00

回复 3楼安心海叶的帖子

很抱歉回复晚了。
C1Chart实时显示数据的方法就如在2楼的示例所示。
我用随时安装示例也测试了0.01s的情况,无法重现你的问题。
因此,也正如你所说的,有可能是你项目中的因素的影响导致。如果你能模拟项目中的实际情况,提供一个重现问题的demo给我们,我们可以根据你的具体情况帮你看看。

安心海叶 发表于 2015-10-24 11:47:00

回复 4楼Alice的帖子

我想看一下,您所说的测试了0.01s的情况,无法重现丢点的情况的截图,或者视频,谢谢~

Alice 发表于 2015-10-26 13:41:00

回复 5楼安心海叶的帖子

使用2楼所示的随机安装示例,将Dynamic.xaml.cs文件里的DispatcherTimer的Interval改成0.01.
代码改成如下:
   dt = new DispatcherTimer()
      { Interval = TimeSpan.FromSeconds(0.01) };

您可以按照以上代码改下试试。

安心海叶 发表于 2015-10-27 09:48:00

回复 6楼Alice的帖子

我想看一下,您所说的没有数据丢点的问题,因为我们用秒表统计过,0.01s在Chart上显示1个数据,1秒钟在图上根本显示的不是100个点。所以我们想看一下您的动画演示。

Alice 发表于 2015-10-27 17:19:00

回复 7楼安心海叶的帖子

您好。
我们针对你提出的点进行了测试。
经过测试发现,在1秒内不可能添加100个点。
因为在1秒内不可能设置100个点给chart的数据源,这是有上限的。由于chart只是负责展示数据,它的数据源没有接收到100个数据,自然无法在1秒展示100个数据。
此问题的瓶颈是在于1秒内无法修改100次数据的添加,推测是和计算机硬件有关系。
页: [1]
查看完整版本: C1Chart实时刷新数据的问题