求助:MSChart动态监控随着时间速度会变慢,如何解决?

井底蛙 2014-12-05 09:16:16
向各位大哥求助,小弟使用.net3.5 (c#)做了一个监控应用程序,监控数据的变化。做法是定时0.5秒读一次数据,放入datatable中,datagridview的datasource是datatable,用于列表显示数据,同时,使用mschart曲线动态显示数据。
刚运行,CPU占用率低,定时0.5秒读一次,曲线滚动一次,但当数据量越来越大的时候,比如大于5个小时以上,timer会变慢,大约1s才读一次,曲线滚动一点。监控10小时以上时,CPU占用率达到了50%。

点的位置:有两种方式滚动,
1.chart1.ChartArea[0].AxisX.ScaleView.Position = totalcount - chart1.ChartArea[0].AxisX.ScaleView.size;
2. chart1.ChartArea[0].AxisX.ScaleView.Scroll(ScrollType.Last);
这两种方式都试过,都会出现这种情况。

数据填入方式是:
//新行
DataRow dr = datatable.NewRow();
//读数据
buffer = readData();
//填数据
dr[0] =buffer[0];
chart1.Series["d01"].Points.AddXY(totalcount, dr[0]);

dr[1] =buffer[1];
chart1.Series["d02"].Points.AddXY(totalcount, dr[1]);
......

//增行
datatable.Rows.Add(dr);


...全文
221 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
井底蛙 2014-12-05
  • 打赏
  • 举报
回复
非常感谢,小弟试下
於黾 2014-12-05
  • 打赏
  • 举报
回复
还有,如果你的程序需要长时间运行,比如运行1个月 你应该把多余的历史数据保存到数据库里去 而不是都在内存里放着 这样早晚要内存不足的
  • 打赏
  • 举报
回复
每10分钟清理一下数据吧。实际上你的dr不但需要增加,也需要“删除”。
於黾 2014-12-05
  • 打赏
  • 举报
回复
如果要查看历史数据, 单独开个窗口, 然后重新定义一个datatable DataTable dt1=dt.Copy(); 这样查看历史的时候,dt里的数据变化不影响dt1,查看历史就没必要再动态刷新了
於黾 2014-12-05
  • 打赏
  • 举报
回复
前台控件里不要放太多数据 占用内存,而且数据过多之后重绘会很慢 前台控件和后台数据源不要直接绑定 你应该做个分页或动态加载,让它只显示一部分数据

4,816

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧