9
我創造了一些簡單的圖表(類型爲快繩)與MSChart的,更新他們的實時數據,如下圖所示:如何提高WinForms MSChart的性能?
要做到這一點,我的自定義類型的可觀察集合綁定到圖表像這樣:
// 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 }
});
}
這現在工作快兩倍多!
謝謝,我會檢查這一點。 – Marcel 2010-03-26 13:45:38
這對我來說工作速度提高一倍以上。我已經添加了這個問題的來源。 – Marcel 2010-03-26 16:13:50
@Marcel:其實我的意思是那些BindXY方法,但我猜得分相同。 – leppie 2010-03-26 16:47:36