首页 > 解决方案 > 为什么同一功能中图表显示速度不同?

问题描述

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();
        });
    }

这是我感兴趣的代码。这是结果。 在此处输入图像描述

初始化数据并将数据添加到图表中花费了太长时间。于是我删掉了这一系列图表,改成添加新的,改成绑定整个数据,没有一个一个的添加数据。速度提高了,但不知道为什么初始化(清除)和绑定图表的速度明显不同。你能告诉我我错过了什么吗?

标签: c#winformscharts

解决方案


推荐阅读