При прокрутке виснет 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 начал недавно, прошу подсказать, в чем может быть неверен мой подход в решении задачи. Спасибо.


Ответы (0 шт):