Из Pro WPF в C # 2008:
Проблема, связанная с этими
приложения не сложность
искусство, но огромное количество
отдельные графические элементы. Даже если
вы заменяете свои элементы Path на
Геометрические объекты легче
накладные расходы все еще будут препятствовать
производительность приложения. WPF
Решение для такой ситуации
использовать визуальный слой нижнего уровня
модель. Основная идея заключается в том, что вы
определить каждый графический элемент как
Визуальный объект, который является чрезвычайно
легкий ингредиент, который имеет меньше
накладные расходы, чем объект Geometry или
Путь объекта.
Что сводится к тому, что каждый из тех эллипсов и линий, которые вы создаете, является отдельным FrameworkElement
; это означает, что он поддерживает не только тестирование попаданий, но также макет, ввод, фокус, события, стили, привязку данных, ресурсы и анимацию. Это довольно тяжелый объект для того, что вы пытаетесь сделать! Объект Visual
пропускает все это и наследует непосредственно от DependencyObject
. Он по-прежнему поддерживает тестирование попаданий, преобразование координат и вычисления ограничивающих рамок, но не поддерживает другие формы, которые поддерживают фигуры. Он гораздо более легкий и, вероятно, значительно улучшит вашу производительность.
EDIT:
Хорошо, я неправильно понял ваш вопрос в первый раз.
В случае, если вы используете OnRender
, это действительно зависит от того, как вы создаете визуальные эффекты и отображаете их. Если вы используете DrawingContext
и добавляете все визуальные эффекты к одному элементу, это ничем не отличается от использования подхода DrawingVisual
. Если бы вы создавали отдельный элемент для каждого созданного Visual
, это было бы проблемой. Мне кажется, что вы делаете все правильно.