От нескольких тысяч все что угодно будет тормозить
Направление указали уже вам, дополню:
Чтобы не скушать всю оперативу и проц
читайте про BitmapCache
https://docs.microsoft.com/ru-ru/dotnet/api/system...
и RenderTargetBitmap
https://docs.microsoft.com/ru-ru/dotnet/api/system...
в UWP кеширование на более верхнем уровне реализовано, там попроще, но в WPF тоже можно сделать хорошо.
Алгоритм вкратце:
2 слоя - верхний -там где тыкаете мышкой
и нижний - кеш
Добавили линию (на верхнем слое) - рендерите в картинку (верх+низ) - отрисовываете эту картинку на нижнем слое (например через ImageBrush), линию на верхнем удаляете.
Т.е. как только пользователь закончил фигуру/действие - кешируете.
Если нужен интерактив на уже нарисованном (например узлы точек подсвечивать), тут сложнее, но тоже возможно (запоминать коодридинаты узлов и при нахождении там мыши - создавать Xaml объект.)
С интерактивом в подобных алгоритмах как правило много математики.
Т.е. у вас в оперативной памяти всегда 1 картинка + сколько-то объектов - полилиний.
К слову, через кеширование кроме рисования можно делать довольно производительные анимации, производительный зумминг, производительный скролл…
Есть еще вариант: реализовать рисование на DirectX на C++ и поместить контрол. Более нативно и производительнее.
P/S
свойсвто IsHitTestVisible
https://docs.microsoft.com/ru-ru/dotnet/api/system...
позволяет не реагировать объекту на мышь (т.е. отключает интерактив) это полезно для объектов фона, сильно бустит производительность.
(т.к. по умолчанию WPF определяет все события интерактива на всех объектах, а их может быть бесчисленное множество, и далеко не на всех нужно иметь реакцию на нажатие/OnMouseMove)