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万数据显示的项目中,但是因为本文的代码是经过删减整理的,可能会有一些问题。取用时要自行验证。
热门推荐
从万人追捧到低调隐退,苏瑾如何用真实生活打动无数观众?
被马超“擒斩”的三位“名将”:两个当时没死,一个两年前就死了
【华西非银周报】预定利率动态调整机制出台,险企利差损风险缓解
春季吃韭菜,大厨教你这样洗才安全
真正的德行不求回报:老子“上德”思想的现代启示
周杰伦新歌教你如何表达珍贵瞬间
日本歌曲翻译:文化差异下的情感再现
重庆仙女山:草原天坑与玩水避暑的“东方瑞士”
重庆到仙女山自驾指南:车辆检查与路线详解
@爱运动的你 这里有一份户外运动安全手册请查收
来滇留学生“入乡随俗”文化认同机制探究
英国离境全攻略:从程序到礼仪,这份实用指南请收好
周慧敏发布精选集,演唱会深情告别39年演艺生涯
色氨酸含量不足,牛奶并非最佳助眠饮品
上海迪士尼亲子游:畅享小镇美食与欢乐时光
上海迪士尼小镇美食购物全攻略:从特色冰激凌到限量周边
糖尿病饮食调控:避开4类升糖食物,智能助手助力管理
多汗症患者的夏日清凉秘籍
香蕉助力多汗症患者饮食调理
肉毒毒素治疗多汗症:安全有效的新型疗法
多汗症患者如何摆脱心理阴影?
王者荣耀:吕布开窍了,完美跟上对抗路节奏,那个坦克杀手回来了
铬元素片可长期服用,但需遵医嘱并控制用量
三国志战略版中马超培养有什么技巧
一个控制盒管8个房间,地暖分室温控实现智能升级
餐饮店非法添加硼砂被查,硼砂是危险化工原料禁用于食品
治疗肝脏血管瘤,这五味中药需遵医嘱使用
石墨烯地暖成高端装修新宠:安装快、能耗低、寿命长
地暖回填施工规范:材料选择与工艺要点详解
硼砂食品屡禁不止,专家教你如何识别这种非法添加剂