How to improve WinForms MSChart performance?
Posted
by Marcel
on Stack Overflow
See other posts from Stack Overflow
or by Marcel
Published on 2010-03-26T09:13:57Z
Indexed on
2010/03/26
10:23 UTC
Read the original article
Hit count: 1160
Hi all,
I have created some simple charts (of type FastLine) with MSChart and update them with live data, like below:
.
To do so, I bind an observable collection of a custom type to the chart like so:
// 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
At each refresh, the dataset completely changes, it is not a scrolling update!
With a profiler I have found that the DataBind()
call takes about 1.5 seconds. The other calls are negligible.
How can I make this faster?
- Should I use another type than ObservableCollection? An array probably?
- Should I use another form of data binding?
- Is there some tweak for the MSChart that I may have missed?
- Should I use a sparsed set of date, having one value per pixel only?
- Have I simply reached the performance limit of MSCharts?
From the type of the application to keep it "fluent", we should have multiple refreshes per second.
Thanks for any hints!
© Stack Overflow or respective owner