![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Paspartu |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 3.5.2007 Репутация: нет Всего: нет |
Доброго времени суток! Заморачиваться с таймерами лень... поэтому решил спросить...
Вопрос такой, насколько можно судить о производительности кода при выполнении программы через диспетчер задач Windows? Дело вот в чем сделал свое окно... Вариант 1 – делаем совместимый контекст и совместимую картинку для нее с максимальным разрешением монитора у меня получилось 1400х1050, всякий раз при изменении размеров моего окна рисуем по этой картинке функциями GDI, затем перекидываем ее на HDC окна через Bitblt(), я еще раз подчеркну – картинка в памяти рисовалась в памяти каждый раз при наступлении WM_NCPAINT! и перекидывалась полностью (1400х1050) в контекст окна через Bitblt() (за исключением клиентской части, которая вырезалась через SelectClipRgn(), ExcludeClipRect(); Собираем Release сомотрим через диспетчер загрузку ЦП при изменении размеров окна = 15-30% (AMD 2,5 Windows XP). Ну думаю как то это не по феншую... Вариант 2 Сделал совместимую картинку размером 200х100, рисую ее один раз при создании окна, еще раз можно акцентировать ваше внимание – картинка рисуется один раз! А при выводе – сделал стандартно – делем ее на 8 частей (4 угла, верх, низ, левая и правая сторана) и по средством BitBlt(),StretchBlt() скидываем ее в контекст окна при наступлении WM_NCPAINT. Все остальное один к одному! (настройки одни и те же и т.д. проект – копия Варианта 1 Собираем Release сомотрим через диспетчер загрузку ЦП при изменении размеров окна = 50-75%!!! т.е. в 2 раза больше!!! Не ужели при полной отрисовке (при каждом WM_NCPAINT) + один Bitblt всей картинки тратся меньше времени, чем при рисовании один раз и дроблении на 8 частей? Почему так? Что это так = 100% (если судить по загрузке ЦП). |
|||
|
||||
| mekhanikus |
|
|||
|
Вольноопределяющийся ![]() Профиль Группа: Участник Сообщений: 186 Регистрация: 16.6.2008 Где: Спасск-Дальний Репутация: 1 Всего: 1 |
Можно предположить, что много хавает StretchBlt().
Попробуй временно убрать Stretch, и посмотри, что получиться. А, может и не надо бордюры окна ресайзить так рьяно? Что ты пытаешся в них рисовать? |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Есть такое умное слово "Профайлер"...
Несколько лет назад боролась за оптимизацию вывода графики (плюс пересчет координат), там вопрос стоял об инлайн-не инлайн, виртуал-не виртуал и т.д. Убедилась, что как только появлется хоть мало-мальский ГУИ-вызов (даже такой пустяк, казалось бы, как SelectObject) - вся разница между виртуальным, инлайновым и т.д. исчезает на его фоне... Вывод - лучше один "тяжелый" ГУИ-вызов чем 5 "легких".... Думаю, что и сейчас ничего не изменилось в этом смысле. -------------------- ... |
|||
|
||||
| Paspartu |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 3.5.2007 Репутация: нет Всего: нет |
Earnest, спасибо за разъяснение!
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |