Ускорение медленной, интенсивной ЦП прокрутки в WinForms

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

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

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

Как я могу оптимизировать прокрутку на более медленных машинах?

5
задан casperOne 3 May 2010 в 15:55
поделиться

3 ответа

Я использовал вкладки, чтобы исключить прокрутку.

1
ответ дан 14 December 2019 в 13:29
поделиться

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

panel1.VerticalScroll.SmallChange = 100;

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

2
ответ дан 14 December 2019 в 13:29
поделиться

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

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

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

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

3
ответ дан 14 December 2019 в 13:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: