C#(.NET)中的图表控件使用大量的CPU

时间:2011-05-06 04:49:23

标签: c# .net charts cpu-usage

我在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。

有没有人有任何建议?有一个更好的方法吗?或者一种特定的方法来加快速度?

感谢您的帮助!

2 个答案:

答案 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肯定会有所帮助。但是,如果图表控件没有利用图形卡,则可能需要查看其他控件。