При прокрутке виснет Canvas
В Canvas при помощи методов АddVisualChild() и AddLogicalChild() добавлен визуальный объект, который содержит 50000 элементов.
XAML:
<ScrollViewer>
<local:DrawingCanvas x:Name="canvasA"/>
</ScrollViewer>
DrawingCanvas:
public class DrawingCanvas : Canvas
{
public void AddVisual(Visual visual)
{
base.AddVisualChild(visual);
base.AddLogicalChild(visual);
}
}
MainWindow:
DrawingVisual visual = new DrawingVisual();
canvasA.AddVisual(visual);
using (DrawingContext dc = visual.RenderOpen())
{
dc.DrawLine(drawingpen, point1, point2);
// отрисовка 50000 элементов DrawLine проходит за 3 мс
}
При прокрутке канаваса FPS не поднимается выше 20.
При уменьшении количества элементов DrawLine FPS повышается.
Также заметил, если добавить в канвас еще один объект Visual с одним элементом DrawLine и перемещать его (по событию MouseMove), то FPS такой же, как при прокрутке.
Почему проседает FPS, ведь иcпользуется самый низкоуровневый подход для рисования и отображения содержимого на канвасе? Переопределение OnRender для отображения дает такой же FPS.
Осваивать WPF начал недавно, прошу подсказать, в чем может быть неверен мой подход в решении задачи. Спасибо.