2010-03-26 26 views
9

我創造了一些簡單的圖表(類型爲快繩)與MSChart的,更新他們的實時數據,如下圖所示:如何提高WinForms MSChart的性能?

MSCharts Level Chart

要做到這一點,我的自定義類型的可觀察集合綁定到圖表像這樣:

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

      } 

這現在工作快兩倍多!

回答

5

使用其他綁定方法,它們非常快。

我更新了3個區域的15個系列,每個系列300個點,每秒更新一次,沒有真正的減速。

+0

謝謝,我會檢查這一點。 – Marcel 2010-03-26 13:45:38

+1

這對我來說工作速度提高一倍以上。我已經添加了這個問題的來源。 – Marcel 2010-03-26 16:13:50

+0

@Marcel:其實我的意思是那些BindXY方法,但我猜得分相同。 – leppie 2010-03-26 16:47:36