powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Производительность рисования в WPF
4 сообщений из 4, страница 1 из 1
Производительность рисования в WPF
    #38413058
_devel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте,

Ситуация такая, есть приложение рисующее большое количество объектов(~1500)
Мышкой и скролом объекты перемещаются и зумируются.
В основном это эллипсы, кривые и текст.
Приложение написано с использованием GDI+.
Все хорошо, но иногда проседает производительность когда много текста выведено.

Решили переделать это в WPF.
Но тут возникли еще большие тормоза.

Делаю так:
1. есть WPF-контрол, который ложиться на обычную форму через elementhost
2. в контроле переопределен OnRender, в котором выведено событие Paint, для прорисовки из вне.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
        public delegate void PaintHandler(DrawingContext drawing_context);
        public event PaintHandler Paint;
        protected override void OnRender(DrawingContext drawing_context)
        {
            base.OnRender(drawing_context);
            if (Paint != null)
                Paint(drawing_context);
        }



3. Дальше создается коллекция Geometry, и во внешнем событии прорисовывается

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
private void uc_Paint(DrawingContext drawing_context)
        {
            if (list != null)
                if (list.Count > 0)
                    foreach (Geometry item in list)
                    {
                        drawing_context.DrawGeometry(Brushes.Green, new Pen(Brushes.Red, 1), item);
                    }
        }



4. Все трансформации делаю так (например Zoom)

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
private void button2_Click(object sender, EventArgs e)
        {
            foreach (Geometry item in list)
            {
                Transform mt = new ScaleTransform(1.5, 1.5);
                item.Transform = new MatrixTransform(Matrix.Multiply(item.Transform.Value, mt.Value));
            }
            uc.InvalidateVisual();
        }




Все хорошо работает, тока тормоза жуткие!!!
Про перемещении мышкой вообще молчу!!!
Хотя на GDI+(private void Paint(object sender, PaintEventArgs e)) все намного лучше.

Что делаю не так?
Если нужно, могу выслать тестовый пример моей поделки!
...
Рейтинг: 0 / 0
Производительность рисования в WPF
    #38462721
gpu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть WPF-контрол, который ложиться на обычную форму через elementhost

обычная форма ето винформс?
...
Рейтинг: 0 / 0
Производительность рисования в WPF
    #38463056
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_devel,

без кода бесполезно гадать. Но имхо нет смысла делать тоже самое на WPF. А если делать, то по другому. Вот мне так кажется.
...
Рейтинг: 0 / 0
Производительность рисования в WPF
    #38483012
kadkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что значит при перемещении мышкой? перетаскивание формы? или просто перемещение? пример можно
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Производительность рисования в WPF
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]