C# chart控件绘制曲线到8000个点的时候就感觉特别卡,是要定时清空么

number007cool 2019-11-07 07:31:30


x坐标轴是滚动的

描点程序如下:

public double m_xValue;
public double m_xScale;


public void DrawPoints(System.Windows.Forms.DataVisualization.Charting.Chart chart, double[] v)
{


for (int i = 0; i < v.Length; i++)
{
chart.Series[i].Points.AddXY(m_xValue, v[i]);

if (i == 0) m_xValue++;

if (m_xValue >= m_xScale)
{
chart.ChartAreas[0].AxisX.Minimum = m_xValue - m_xScale;
chart.ChartAreas[0].AxisX.Maximum = m_xValue;
}
}


}
...全文
2554 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
椰壳里的海 2022-02-05
  • 打赏
  • 举报
回复 1
联系我吧!上千万数据都不卡顿,处理高达10M每秒实时数据同步绘制曲线,并任意范围放大缩小移动实时曲线。百度“思润菲咪”加我微信,可获取演示程序。
搬砖的奶霸 2022-04-09
  • 举报
回复
@椰壳里的海 赞一个
椰壳里的海 2021-05-12
  • 打赏
  • 举报
回复
大侠,你的产品很好!我也制作了一个曲线控件,你可以进入'陕西思润菲咪软件科技有限公司'我的网站,下载演示示例,以后在应用开发上我们可以协作。
椰壳里的海 2021-04-26
  • 打赏
  • 举报
回复
楼主,这个问题不难解决,我也遇到过该类问题,可以看看我的贴子。
number007cool 2019-11-14
  • 打赏
  • 举报
回复
各位大神 , 在不更换图形控件的情况下 这个问题能否得到解决,毕竟用自带的稍微方便一些
by_封爱 版主 2019-11-08
  • 打赏
  • 举报
回复
你这个应该是mschart?? 这个我没用过.但是针对你的需求 我做过一款实时采集数据的东西 可能有几百万点. 运行几个月. 就这个需求我最终采用了teechart这个控件. 专业性比较强 功能肯定够用..而且这个控件你一次性加100W个点 也不卡. 如果LZ有时间 可以去研究一下这个控件 效率比较高.
number007cool 2019-11-08
  • 打赏
  • 举报
回复
引用 11 楼 Nick_Ngai 的回复:
还有RemoveAt是否可以,再没办法,我也不知道了
index 填多少合适
Nick_Ngai 2019-11-08
  • 打赏
  • 举报
回复
还有RemoveAt是否可以,再没办法,我也不知道了
number007cool 2019-11-08
  • 打赏
  • 举报
回复
引用 9 楼 Nick_Ngai 的回复:
或者试试Points.Remove之类,能否清除掉已经滚动过去的。
chart.Series[j].Points.Remove(Datapoint item ) Datapoint item 这个参数从哪来 还有 现在滚动是自己做的,比如点数到达xScal 后,x的坐标轴起始就减掉 xScale , 要是有控件自动有这些功能就好了
Nick_Ngai 2019-11-08
  • 打赏
  • 举报
回复
或者试试Points.Remove之类,能否清除掉已经滚动过去的。
number007cool 2019-11-08
  • 打赏
  • 举报
回复
引用 6 楼 Nick_Ngai 的回复:
https://social.msdn.microsoft.com/Forums/office/zh-CN/5bc5f360-5231-42f7-91b8-6636f8ddcd54/24555368952816531354chart25968254542434121457303402432224120?forum=visualcshartzhchs
      /// <summary>
        /// 描点方法重载
        /// </summary>
        /// <param name="chart"></param>
        /// <param name="v"></param>
        public void DrawPoints(System.Windows.Forms.DataVisualization.Charting.Chart chart, double[] v)
        {


            for (int i = 0; i < v.Length; i++)
            {
                chart.Series[i].Points.AddXY(m_xValue, v[i]);

                if (i == 0) m_xValue++;

                if (m_xValue >= m_xScale)
                {
                    chart.ChartAreas[0].AxisX.Minimum = m_xValue - m_xScale;
                    chart.ChartAreas[0].AxisX.Maximum = m_xValue; 
                }

                if( m_xValue >= m_xScale *10)
                {
                    m_xValue = 0;

                    for (int j = 0; j < v.Length; j++ )
                        chart.Series[j].Points.Clear();
           
                }
            }
每次到clear的时候,就是出现1秒钟不到的空白期, 感觉断片了
number007cool 2019-11-08
  • 打赏
  • 举报
回复
引用 5 楼 wanghui0380 的回复:
可以考虑用js的试试效果,毕竟浏览器花了N多精力去搞D3D优化,Highdpi优化,gpu优化,离屏绘制优化。普通chart恐怕还没投入那么多精力,毕竟chart原来用的多的是数学统计展示,不是实时显示数据,实时显示数据都是加窗抽取了的
我这个是做实时数据分析用的,也就是传感器开机后,会不停的绘制曲线 而且对于特定场合, 描点频率和点数会很高
wanghui0380 2019-11-08
  • 打赏
  • 举报
回复
可以考虑用js的试试效果,毕竟浏览器花了N多精力去搞D3D优化,Highdpi优化,gpu优化,离屏绘制优化。普通chart恐怕还没投入那么多精力,毕竟chart原来用的多的是数学统计展示,不是实时显示数据,实时显示数据都是加窗抽取了的
Nick_Ngai 2019-11-08
  • 打赏
  • 举报
回复
这个chart控件要定期清理下吧,不是有Dispose方法。
number007cool 2019-11-08
  • 打赏
  • 举报
回复
引用 2 楼 Nick_Ngai 的回复:
不定时清空的话,很耗内存吧
你说的清具体指的是哪个操作? 把所有曲线删掉,然后重新初始化chart控件?
Nick_Ngai 2019-11-08
  • 打赏
  • 举报
回复
不定时清空的话,很耗内存吧
number007cool 2019-11-08
  • 打赏
  • 举报
回复
引用 13 楼 by_封爱 的回复:
你这个应该是mschart?? 这个我没用过.但是针对你的需求 我做过一款实时采集数据的东西 可能有几百万点. 运行几个月. 就这个需求我最终采用了teechart这个控件. 专业性比较强 功能肯定够用..而且这个控件你一次性加100W个点 也不卡. 如果LZ有时间 可以去研究一下这个控件 效率比较高.
teechart 我用mfc搞过, 卡到是没发现,但是,看程序内存一路飙升, 是不是也要定时清个什么东东啊
number007cool 2019-11-07
  • 打赏
  • 举报
回复
m_xScale 为100 也就是 整个屏幕有100个点

110,552

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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