C# 如何解决chart控件显示数据量过大时的卡顿问题
创作时间:
作者:
@小白创作中心
C# 如何解决chart控件显示数据量过大时的卡顿问题
引用
CSDN
1.
https://blog.csdn.net/qq_41848097/article/details/106119181
前言
Winform中自带的曲线显示控件Chart,在显示数据量过大时会出现卡顿的情况,导致用户体验不好。
针对这种情况本文通过数据分段的方法解决此类问题。
几个重要的属性
在介绍实现方法前需要先了解chart控件的几个属性
- ChartAreas :绘图区域,当数据量大时只要一个绘图区域。
- AxisX:X轴。(Y轴一致,此文进介绍X轴)。
- AxisX.ScrollBar:X轴滚动条。
- AxisX.ScaleView.Position:X轴显示的起始值。
- AxisX.ScaleView.Size:X轴显示数据的数量
图中
AxisX.ScaleView.Position = 941
AxisX.ScaleView.Size = 1941-941+1
实现思路
- 将数据分段每段10000到50000之间(以50000为例)。
- 给chart控件添加滚动条,
- 将第一个数据段的数据绑定到chart数据源上,给chart添加鼠标滚动事件。
- 滚动滚轮可以更改AxisX.ScaleView.Position的值,当显示完最后一个数值时,更改chart的数据源将第二段数据绑定在chart数据源上。
- 依次循环就可以实现所有数据的显示
代码实现
- 数据分段
double[] data = new double[2000*1000]{...};//需要显示的数据 长度为200万。
public List<double[]> DataPanel = new List<double[]>();
for(int m =0;m<40;m++)
{
double [] smallArray = new double [50000];
for(int n = 0;n<50000;n++)
{
smallArray [n] = data [m*50000+n];
}
DataPanel.Add(smallArray);
}
- 给chart控件添加滚动条
private void ChartScrollbarStyle()
{
chart1.ChartAreas[0].AxisX.ScrollBar.Enabled = true;
chart1.ChartAreas[0].AxisX.ScaleView.Position = 1;
chart1.ChartAreas[0].AxisX.ScaleView.Size = 300;
chart1.ChartAreas[0].AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.SmallScroll;
chart1.ChartAreas[0].AxisX.ScrollBar.ButtonColor = Color.Silver;
chart1.ChartAreas[0].AxisX.ScrollBar.LineColor = Color.Black;
chart1.ChartAreas[0].AxisX.ScrollBar.IsPositionedInside = false;
}
- 将数据绑定在chart数据源上,更改DataCount,就更改了数据源。
int DataCount = 0;
chart1.Series[0].Points.DataBindY(DataPanel[DataCount]);
- 给chart控件添加鼠标滚轮事件
//该事件需要注册在方法中,最好可以放在构造方法中。
chart1.MouseWheel += Chart1_MouseWheel;
private void Chart1_MouseWheel(object sender, MouseEventArgs e)
{
int position = Convert.ToInt32(chart1.ChartAreas[0].AxisX.ScaleView.Position);
int WindowSize = (int)chart1.ChartAreas[0].AxisX.ScaleView.Size;
if (e.Delta < 0)
{
position += 200;//滚轮动一下,移动多少数据
if (position >= chart1.ChartAreas[0].AxisX.Maximum - WindowSize)//一段数据显示完毕
{
DataCount++;
if (DataCount >= DataPanel.Count)
{
MessageBox.Show("所有数据已经全部显示完毕", "提示");
DataCount = DataPanel.Count - 1;
return;
}
chart1.Series[0].Points.DataBindY(DataPanel[DataCount]);
position = 1;//新的一段数据开始时 滚动条移动到最左侧
}
}
else
{
position -= 200;
if (position < 1)
{
if (DataCount == 0)
{
position = 1;
MessageBox.Show("已经是第一个数据", "提示");
}
else
{
DataCount--;
}
chart1.Series[0].Points.DataBindY(DataPanel[DataCount]);
position = Convert.ToInt32(chart1.ChartAreas[0].AxisX.Maximum - WindowSize);
}
}
chart1.ChartAreas[0].AxisX.ScaleView.Position = position;
}
- 到此处,基本上就已经完成了。理论上讲可显示的数据量为无限大。并且该方法本人已经应用于超1000万数据显示的项目中,但是因为本文的代码是经过删减整理的,可能会有一些问题。取用时要自行验证。
热门推荐
孤独与寂寞的哲学:你get了吗?
猫咪叫声揭秘:你真的懂TA的需求吗?
猫咪也能听懂人话?教你几招训练秘籍
揭秘皇家铂金工厂:五大关卡守护猫粮品质
袁哲生笔下的寂寞游戏:一场关于青春与孤独的探寻
孤独让你更懂自己
单招落榜后,如何快速调整心态?
2024年安徽省体育高职单招志愿填报全攻略:时间、流程与注意事项
类风湿性关节炎防治指南:从医学治疗到生活管理
类风湿性关节炎:慢性疼痛的治疗与生活管理指南
周文强:人人皆可掌握的财商智慧:开启财富自由之门
青春期孤独感:成因、影响与应对之道
加入社区组织,告别孤独感
马斯洛教你摆脱孤独感:从社交到自我实现
青少年孤独心理:如何帮助他们走出内心的困境?
怎样挽回分手后的感情呢
星座日期与配对指南:找到你的完美星座伴侣
发现一个秘密,你的“爱情时刻表”竟全藏在这里!(值得收藏)
怦然心动:爱情的青春启示录
脑动脉狭窄患者的心理调适指南
山东大学齐鲁医院专家详解:脑动脉狭窄的健康管理
兔年春节,揭秘生肖谜语里的传统文化
化学实验达人教你鉴别烯烃与甲苯
心理咨询师报考条件全解析:从学历到职业发展
婚宴点菜有什么讲究?订婚宴必点的菜都在这里了!
正月结婚有什么说法
正月不结婚有什么说法
龚爽领衔千人合唱团,武汉上演激光秀版《我的祖国》
先天后天耳部折痕怎么办?非手术治疗和手术矫正全攻略
蛹虫草的功效与食用全攻略:7种养生食谱详解