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