Ускорение медленной, интенсивной загрузки ЦП в WinForms - PullRequest
5 голосов
/ 03 мая 2010

Как ускорить прокрутку UserControls в приложении WinForms .?

Моя основная форма имеет проблемы с быстрой прокруткой на медленных машинах - рисование для каждого небольшого шага прокрутки требует интенсивной загрузки ЦП.

Моя форма содержит примерно пятьдесят пользовательских элементов управления (с несколькими полями), расположенных один под другим. Я попытался перехватить OnScroll и UserPaint, чтобы исключить некоторые ненужные перерисовки для очень маленьких событий прокрутки, но в любом случае вызывается базовая Paint.

Как упростить прокрутку на медленных машинах?

Ответы [ 3 ]

3 голосов
/ 03 мая 2010

Проверенный метод заключается в использовании закадрового растрового изображения, которое обновляется только тогда, когда данные, представленные вашим элементом управления, фактически изменяются; затем все, что нужно сделать OnPaint, это отобразить это растровое изображение на экране.

Если процесс рисования интенсивный и у вас так много элементов управления, вы обнаружите, что это существенно влияет на производительность вашего приложения.

Обратите внимание, что использование свойства элемента управления DoubleBuffering не поможет в вашем случае - оно делает указанием WinForms визуализировать в закадровое растровое изображение перед отображением на экране, но это все же происходит при каждой рисовании цикл, поскольку WinForms не отслеживает, когда изменилось представление.

Итак, вам придется свернуть свой собственный. Это не так сложно. Вот что выглядит как достаточно хорошая статья на эту тему .

2 голосов
/ 03 мая 2010

Вы также можете увеличить размер шага прокрутки. Например

panel1.VerticalScroll.SmallChange = 100;

Заставит панель прокручивать содержимое на 100 единиц по вертикали за нажатие кнопки полосы прокрутки Таким образом, вы каждый раз делаете более масштабные шаги, которые, по крайней мере, могут помочь вам почувствовать себя лучше. И вы можете сделать то же самое для горизонтальной полосы прокрутки, конечно.

1 голос
/ 03 мая 2010

Я использовал вкладки для устранения прокрутки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...