(преждевременные) оптимизации
В дополнение к другим уже опубликованным ответам вы пытаетесь нарисовать сплайновую кривую через 100 точек.
Это, вероятно, плохая идея по двум причинам: во-первых, подгонка кривой к 100 точкам не особенно быстрая вещь при любых обстоятельствах. Во-вторых, поскольку все точки расположены на расстоянии 1 пиксель, использование кривой, вероятно, не принесет никакой пользы.
Следовательно, вы можете сделать еще несколько вещей, которые могут улучшить скорость:
Попробуйте использовать PolyLine, а не кривую,
Если вам нужно использовать кривую, то вам, вероятно, не нужно использовать 100 точек на 100 пикселях чертежа - использование 10 или 20 позиций по этой ширине может дать вам лучшие результаты и значительно уменьшит работа по подгонке кривой, которую должен выполнить .net.
Вы также можете удалить некоторые промежуточные точки, которые лежат на линии / кривой, чтобы у вас было меньше линий для рисования. например если у вас есть точки в (10,57) (11, 57) (12,57), то вы можете опустить среднюю точку и просто провести прямую линию от (10,57) до (12,57).
Неправильный алгоритм?
Но подождите! Прежде чем оптимизировать код - действительно ли это правильное решение проблемы?
Звучит так, как будто контент не предназначен для «изменения», а просто прокручивается вбок. В этом случае только новые пиксели, введенные на одной стороне изображения, фактически «меняются» с каждым кадром - остальные просто перемещаются вбок. В этом случае вы можете прокрутить (переместить) область графики, которая содержит «старое» изображение кривой, а затем просто нарисовать один или два дополнительных пикселя, которые «прокручиваются в поле зрения». Прокрутка таким способом может быть достигнута несколькими различными способами (например, перетаскивание в графике или, если содержимое всего окна прокручивается, с помощью команд прокрутки окон формы)
Точно так же, если данные не изменяются, а просто «прокручиваются», то перестройка массива для каждого кадра является излишне дорогой. Используя кольцевой буфер, вы можете просто добавить новую точку в «конец» массива и удалить ее с начала без необходимости перераспределять массив или вообще копировать все промежуточные точки.
Так что все дело в использовании правильного инструмента для работы.