c# - 为什么同一功能中图表显示速度不同?
问题描述
delegate void Display_chart_Clear_Callback(Chart chart);
private void Display_chart_Clear(Chart chart)
{
if (chart.InvokeRequired)
{
Display_chart_Clear_Callback tmpCallback = new Display_chart_Clear_Callback(Display_chart_Clear);
chart.Invoke(tmpCallback, new object[] { chart });
}
else
{
chart.Series.RemoveAt(0);
Series tmpSeries = new Series
{
ChartArea = "ChartArea1",
ChartType = SeriesChartType.Line,
Color = Color.Red
};
tmpSeries.EmptyPointStyle.LabelForeColor = Color.Silver;
tmpSeries.IsVisibleInLegend = false;
tmpSeries.LabelForeColor = Color.Bisque;
tmpSeries.Legend = "Legend1";
tmpSeries.Name = "Hall";
chart.Series.Add(tmpSeries);
chart.Series[0].Points.AddXY(0, 0);
}
}
delegate void Display_chart_DataBind_Callback(Chart chart, double[] DataBuf);
private void Display_chart_DataBind(Chart chart, double[] DataBuf)
{
if (chart.InvokeRequired)
{
Display_chart_DataBind_Callback tmpCallback = new Display_chart_DataBind_Callback(Display_chart_DataBind);
chart.Invoke(tmpCallback, new object[] { chart, DataBuf });
}
else
{
chart.ChartAreas[0].AxisX.Maximum = DataBuf.Length;
int[] Axis_X = new int[DataBuf.Length];
for (int i = 0; i < DataBuf.Length; i++)
{
Axis_X[i] = i;
}
chart.Series[0].Points.DataBindXY(Axis_X, DataBuf);
}
}
private void button1_Click(object sender, EventArgs e)
{
Task tmpTask = Task.Run(() =>
{
Stopwatch watch = Stopwatch.StartNew();
double[] SampleData1 = new double[100000];
Console.WriteLine("1st Create Data elapsed time: " + watch.ElapsedMilliseconds.ToString() + "ms");
Display_chart_Clear(chart1);
Display_chart_Clear(chart2);
Console.WriteLine("1st Clear elapsed time: " + watch.ElapsedMilliseconds.ToString() + "ms");
Display_chart_DataBind(chart1, SampleData1);
Display_chart_DataBind(chart2, SampleData1);
Console.WriteLine("1st bind elapsed time: " + watch.ElapsedMilliseconds.ToString() + "ms");
Console.WriteLine();
Stopwatch watch2 = Stopwatch.StartNew();
double[] SampleData2 = new double[100000];
Console.WriteLine("2nd Create elapsed time: " + watch2.ElapsedMilliseconds.ToString() + "ms");
Display_chart_Clear(chart1);
Display_chart_Clear(chart2);
Console.WriteLine("2nd Clear elapsed time: " + watch2.ElapsedMilliseconds.ToString() + "ms");
Display_chart_DataBind(chart1, SampleData2);
Display_chart_DataBind(chart2, SampleData2);
Console.WriteLine("2nd bind elapsed time: " + watch2.ElapsedMilliseconds.ToString() + "ms");
Console.WriteLine();
Console.WriteLine();
watch.Stop();
watch2.Stop();
});
}
这是我感兴趣的代码。这是结果。 在此处输入图像描述
初始化数据并将数据添加到图表中花费了太长时间。于是我删掉了这一系列图表,改成添加新的,改成绑定整个数据,没有一个一个的添加数据。速度提高了,但不知道为什么初始化(清除)和绑定图表的速度明显不同。你能告诉我我错过了什么吗?
解决方案
推荐阅读
- r - 如何在R中没有时间变量的时间绘制?
- git - 自动检查 git pull 请求以进行文件更改
- javascript - if (eventlistener == active) { //do something} else {//do something else}
- javascript - 在 VueJS 中使用 Advance Join()
- pyspark - 在 DataFrame.GroupBy 之后 PySpark 中的数据转换
- dhall - 如何在 dhall 中模拟 Python 连接函数?
- json - 返回 System.Data.Entity 而不是 JsonResult 上的 namespace.Models
- ios - React Native 白屏没有错误 iOS
- r - 如何处理 R 中 stringr str_match_all 中的不匹配项?
- javascript - 我可以为javascript中if语句的结果分配一个变量吗?