Graphics.Draw*, автопрокрутка и отбраковка

Я реализовал пользовательский элемент управления в C#/Winforms, который выполняет такие функции, как подсветка синтаксиса и автозаполнение. Я использую AutoScroll для управления прокруткой, и он прекрасно работает.

В настоящее время я вообще не оптимизировал (конечно, оптимизация важна, но я делаю это в последнюю очередь; функциональность — это то, что мне нужно в первую очередь), я визуализирую огромные документы, и каждое нажатие клавиши будет повторно анализировать затронутую строку, чтобы убедиться подсветка синтаксиса непротиворечива.

Прямо сейчас в моем большом мясистом методе рисования я рисую каждую строку, ключевое слово и т. Д., Даже если они находятся за пределами области клипа. Но независимо от того, насколько велик документ и сколько комбинаций ключевых слов/выделенных фрагментов и фрагментов у меня есть, он по-прежнему работает чертовски быстро с небольшими затратами памяти и ЦП.

Итак, мой вопрос: методы Graphics.Draw * выполняют какую-либо отбраковку? Например: если AutoScrollPosition находится далеко внизу документа и я Graphics.DrawString(вставить некоторые координаты за пределами области рисования), выполняется ли какая-либо реальная работа? Также обратите внимание, что я запускаю VS на Win 7 внутри виртуальной машины, и она по-прежнему работает быстро. Не то чтобы сейчас это было проблемой, но было бы неплохо иметь в виду на будущее, когда дело дойдет до этапа оптимизации. :D

Привет, Аарон


person nevelis    schedule 14.12.2011    source источник


Ответы (1)


Из личного опыта написания игр, использующих методы Graphics.Draw*, вы заметите увеличение скорости, если перед вызовом методов рисования выполните собственную проверку границ.

Попытка рисовать что-то вне экрана быстрее, чем рисование на экране, но все же заметно медленнее, чем вообще не рисовать.

person William Lawn Stewart    schedule 14.12.2011