У меня есть холст с динамической шириной.Мне нужно нарисовать график на этом холсте.Из-за количества измеренных значений и специфики бизнес-сферы невозможно использовать сторонние элементы управления и компоненты.
Диаграмма показывает уровень некоторых измерений, которые являются дискретными.Ось X указывает время измерения.В худшем случае каждый пиксель графика может иметь разный уровень.Вот так это выглядит так: ![Chart](https://i.stack.imgur.com/OVMRq.png)
Мой первый подход, чтобы заставить его работать, состоял в том, чтобы нарисовать линию для каждого пикселя.Мой код выглядит так:
MyCanvas.Children.Clear();
var random = new Random();
for (var i = 0; i < MyCanvas.Width; i++)
{
var line = new Line()
{
X1 = i,
X2 = i,
Y1 = MyCanvas.ActualHeight,
Y2 = MyCanvas.ActualHeight - random.Next(0, (int)MyCanvas.ActualHeight),
Stroke = Brushes.Blue
};
MyCanvas.Children.Add(line);
}
Этот код делает то, что я хочу.Он рисует диаграмму, подобную этой: ![Chart](https://i.stack.imgur.com/fC94w.png)
Но кажется, что это не оптимальный способ сделать такие вещи, как этот.Моя диаграмма должна поддерживать панорамирование и масштабирование, и для перерисовки диаграммы при каждом запросе пользователя требуется около 200-350 мс.Это слишком много (1000/350 = 2,85 кадров в секунду).
У меня нет большого опыта работы с WPF, поэтому мой вопрос - какой самый оптимальный способ нарисовать такой график?Возможно, мне нужно использовать объекты Paths и Geometry, но я не могу с уверенностью сказать, что это даст значительный выигрыш в производительности, пока я не реализую его.Также я не знаю, какую геометрию мне нужно использовать.Кажется, что LineGeometry соответствует моим ожиданиям.
Заранее спасибо.