Здравствуйте, alesterre, Вы писали:
A>1. Using Shapes and higher lever objects will make development easy, but slow when you want to add a lot of shapes to the screen. They inherit from System.Windows.FrameworkElement, and as such contain a lot of baggage that you can do without if you want faster graphics.
A>2. Using the DrawingContext of a canvas to draw the shapes directly onto it (also look at StreamGeometry). You will have to use VisualHitTesting to handle mouse interation (not that difficult), but rendering is far far quicker when handling lots of objects on the screen. This option will take longer to get to grips with, but the application performance will be an order of magnitude better.
A>[/q]
A>Получается, мне стоит пойти по второму пути?
Путь 2. наиболее актуален для таких задач. Однако, в случае работы с большим числом данных(более 10к точек) и особенно с всякими ресайзами, скроллингами и т.д. уже одного такого направления- мало. Очень быстро прийдется столкнуться с необходимостью предварительной фильтрации данных. Основное правило: показывать только то, что видит пользователь и не более. Так, нет смысла выводить больше точек, чем разрешение экрана, на котором производится отображение изображения. Чаще всего 2048 точек на один экран будет уже достаточно для многих мониторов. Далее, прийдется заботится о механизмах кеширования участков изображения. Основной принцип: обновлять только те участки, которые изменились, а не все изображение целиком. Это приведет к использованию различного рода блитингов и к WriteableBitmap и(или) DirectX под WPF. Тут поможет библиотека-надстройка над стандартным WriteableBitmap от Рене Шульца(ссылка на
writeablebitmapex.codeplex.com/). Ну а король скорости под WPF — прямой вызов DirectX(как упоминалость постами выше).
Для дальнейших советов нужно больше информации о специфике выводимого графика и на какие компромисы вы готовы пойти.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>