9

我用 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

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

使用分析器,我发现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 }
                    });

            }

现在,它的运行速度是原来的两倍多!

4

1 回答 1

5

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

我在 3 个领域更新了大约 15 个系列,每个系列每秒钟都有 300 分,而且没有真正的减速。

于 2010-03-26T10:16:53.213 回答