我在C#中使用FastLineChart来实时显示来自外部设备的信号。采样率约为700Hz。在我的程序中,我下采样到大约100Hz,以尽量减少显示器的不必要的分辨率,但仍然使用太多的CPU来做这件事。
我认为问题在于我在图表中滚动数据(就像Windows中的CPU图形一样),这会占用资源。我这样做是通过删除最旧的元素,然后在特定的系列中添加一个新元素(如下所示)。
timeGraph.Series[0].Points.RemoveAt(0);
timeGraph.Series[0].Points.AddY(average);
CPU负载约为30%,我觉得有点太高了。我没有最新的电脑,但它是带有GT9600显卡的Code 2 Duo。
有没有人有任何建议?有一个更好的方法吗?或者一种特定的方法来加快速度?
感谢您的帮助!
答案 0 :(得分:4)
好的,这么老的问题要回答,但是我多年来一直遇到类似这样的问题,所以对于那些发现这个问题的人来说:
停止大量CPU使用:
1)声明一个整数
int graphUdate = 0;
2)在form_ load中,添加
chart1.Series.SuspendUpdates();
3)在图表中添加点时,请使用
graphUpdate++;
4)在相同的空间中,每隔#个点更新图形并重置graphUpdate
if (graphUpdate == #)
{
chart1.Series.ResumeUpdates();
chart1.Series.Invalidate();
chart1.Series.SuspendUpdates();
graphUpdate = 0;
}
这会更新自上一个chart1.Series.SuspendUpdates();
以来收集的所有点还将暂停删除积分,从而使CPU使用率出现主要差异。
答案 1 :(得分:1)
我建议问题可能是您正在使用Winforms。处理动画图形时,GDI +相当慢。如果可能的话,转移到WPF肯定会有所帮助。但是,如果图表控件没有利用图形卡,则可能需要查看其他控件。