Элемент управления диаграммы не является поточно-ориентированным. Вы не можете просто вызывать его функции из нескольких потоков параллельно.
Используйте метод DataBindY
для добавления нескольких точек данных одновременно. Для повышения производительности методы DataBind*
используют внутренне SuspendUpdates
/ ResumeUpdates
, чтобы предотвратить перерисовку диаграммы во время добавления точек данных.
Невозможно улучшить производительность по сравнению с тем, как Microsoft реализовала свои DataBind*
методы.
Измерение производительности:
double[] x = new double[1_000_000];
Random r = new Random();
for (int i = 0; i < x.Length; i++)
{
x[i] = r.NextDouble();
}
var Signal = new Series
{
IsVisibleInLegend = true,
ChartType = SeriesChartType.Line,
LegendText = "Original Signal",
};
DateTime start = DateTime.Now;
Signal.Points.DataBindY(x);
DateTime end = DateTime.Now;
MessageBox.Show((end - start).TotalMilliseconds.ToString());
Этот код показывает, что на моем компьютере требуется ~ 1600 мс для добавления точек данных с помощью DataBindY
. Я не понимаю, как вы могли бы улучшить эту часть.
Если вы видите низкую производительность для фактического рисования диаграммы, вам придется искать улучшения, уменьшая количество точек данных. Например, ограничить количество точек в целом или включить только каждый n-й элемент данных.