问题描述
最近在写一个程序,从检测设备实时接收数据,并用mschart实时动态显示走势图,一共有5万个数据,现在问题是随着数据量的增加,mschart图形显示越来越慢,而且用滚条拉动的话非常卡,有没有好的解决办法,谢谢。下面一段程序是给mschart赋值的部分。intsum=0;intcount=0;try{SocketsocketServer=socketClientParaasSocket;while(true){byte[]arrServerRecMsg=newbyte[6];//将接收到的信息存入到内存缓冲区,并返回其字节数组的长度intlength=socketServer.Receive(arrServerRecMsg);stringaa=System.Text.Encoding.Default.GetString(arrServerRecMsg);sum=sum+Convert.ToInt32(aa);if(count%50==0){if(this.chart1.InvokeRequired)//等待异步{chart1.Invoke(newAction(()=>{chart1.Series["SeriesD56"].Points.AddY(Convert.ToInt32(sum/50));}));this.BeginInvoke(newMethodInvoker(delegate(){chart1.ChartAreas["Default"].AxisX.ScaleView.Scroll(ScrollType.Last);}));}else{chart1.Series["SeriesD56"].Points.AddY(Convert.ToInt32(sum/50));}sum=0;}count++;GC.Collect();}
解决方案
解决方案二:
1.如果5w数据一定要全部显示,那lz得花钱换控件了2.可以换成分页方式,比如每次只显示2000个点给用户提供跳转按钮,根据需要进行跳转
解决方案三:
你好,请教一下,如果winform的话,如何动态分页?
解决方案四:
引用1楼xian_wwq的回复:
1.如果5w数据一定要全部显示,那lz得花钱换控件了2.可以换成分页方式,比如每次只显示2000个点给用户提供跳转按钮,根据需要进行跳转
你好,请教一下,如果winform的话,如何动态分页?
解决方案五:
简单说下思路,后台的数据(5w条)放入List,需要显示那一部分,就从list中拷贝相应的数据,然后绑定到控件显示。其实就是换个方式,绕过加载大量数据
解决方案六:
引用4楼xian_wwq的回复:
简单说下思路,后台的数据(5w条)放入List,需要显示那一部分,就从list中拷贝相应的数据,然后绑定到控件显示。其实就是换个方式,绕过加载大量数据
如果chart中有滚动条的话,我保存图片,能不能把界面上隐藏的那部分图形一起保存下来?
解决方案七:
我感觉GDI+会不会好一些
解决方案八:
引用6楼SomethingJack的回复:
我感觉GDI+会不会好一些
之前用的是GDI+效果还行,但是计算坐标之类的太麻烦了,而且放大缩小不好计算。