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

NJC*_*NJC 6 .net c# charts cpu-usage

我在C#中使用FastLineChart来实时显示来自外部设备的信号.采样率约为700Hz.在我的程序中,我下采样到大约100Hz以最小化显示器的不必要的分辨率,但仍然使用太多CPU这样做.

我认为问题是我在图表中滚动数据(就像在Windows中的CPU图形一样),这就是在耗费资源.我这样做是通过删除最旧的元素然后在特定系列中添加一个新元素(如下所示).

timeGraph.Series[0].Points.RemoveAt(0);
timeGraph.Series[0].Points.AddY(average);
Run Code Online (Sandbox Code Playgroud)

CPU负载约为30%,我认为有点太高了.我没有最新的电脑,但它是带有GT9600显卡的Code 2 Duo.

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

感谢您的任何帮助!

小智 5

好的,这么老的问题要回答,但是我一直困扰着类似的问题,所以对于任何发现这个问题的人来说:

要停止大量CPU使用:

1)声明一个整数

int graphUdate = 0;
Run Code Online (Sandbox Code Playgroud)

2)在form_load中添加

chart1.Series.SuspendUpdates();
Run Code Online (Sandbox Code Playgroud)

3)在图形上添加点时,使用

graphUpdate++;
Run Code Online (Sandbox Code Playgroud)

4)在同一空间中,每#个点数更新一次图形并重置graphUpdate

if (graphUpdate == #)
            {
                chart1.Series.ResumeUpdates();
                chart1.Series.Invalidate();
                chart1.Series.SuspendUpdates();
                graphUpdate = 0;
            }
Run Code Online (Sandbox Code Playgroud)

这将更新自上一个chart1.Series.SuspendUpdates()以来收集的所有点。

点的删除也将被暂停,这会严重影响CPU使用率。


IAm*_*rey 2

我建议问题可能是您使用的是 Winforms。GDI+ 在处理动画图形时相当慢。如果可能的话,迁移到 WPF 肯定会有所帮助。但是,如果图表控件不利用图形卡,您可能需要研究不同的控件。