如何提高WinForms MSChart的性能?

Mar*_*cel 9 c# performance mschart winforms

我用MSChart创建了一些简单的图表(类型为FastLine),并使用实时数据更新它们,如下所示:

MSCharts等级图表

为此,我将自定义类型的可观察集合绑定到图表,如下所示:

                // set chart data source
            this._Chart.DataSource = value; //is of type ObservableCollection<SpectrumLevels>

            //define x and y value members for each series
            this._Chart.Series[0].XValueMember = "Index";
            this._Chart.Series[1].XValueMember = "Index";
            this._Chart.Series[0].YValueMembers = "Channel0Level";
            this._Chart.Series[1].YValueMembers = "Channel1Level";

            // bind data to chart
            this._Chart.DataBind(); //lasts 1.5 seconds for 8000 points per series
Run Code Online (Sandbox Code Playgroud)

每次刷新时,数据集都会完全更改,而不是滚动更新!

通过分析器,我发现DataBind()呼叫大约需要1.5秒.其他电话可以忽略不计.

我怎样才能让它更快?

  • 我应该使用除ObservableCollection之外的其他类型吗?一个阵列可能?
  • 我应该使用其他形式的数据绑定吗?
  • 我可能错过了MSChart的一些调整吗?
  • 我应该使用一组稀疏的日期,每个像素只有一个值吗?
  • 我是否只是达到了MSCharts的性能限制?

从应用程序的类型来保持它"流畅",我们应该每秒多次刷新.

谢谢你的任何提示!

编辑:leppie提出的解决方案:

                this._Chart.Series[0].Points.Clear();
            foreach (var item in value) //iterates over the list of custom objects
            {
                    this._Chart.Series[0].Points.Add(new DataPoint
                    {
                        XValue = item.Index,
                        YValues = new double[] { item.Channel0Level.Value }
                    });

            }
Run Code Online (Sandbox Code Playgroud)

现在这个速度提高了两倍多!

lep*_*pie 5

使用其他Bind方法,它们非常快.

我更新了大约15个系列超过3个区域,每个系列中有300个点,每秒,并没有真正的减速.