Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по производительности(эффективности) 
:(
    Опции темы
Paspartu
Дата 29.9.2008, 02:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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).

Ну думаю как то это не по феншую...  smile решил соптимизировать... smile 

Вариант 2 Сделал совместимую картинку размером 200х100, рисую ее один раз при создании окна, еще раз можно акцентировать ваше внимание – картинка рисуется один раз! А при выводе – сделал стандартно – делем ее на 8 частей (4 угла, верх, низ, левая и правая сторана) и по средством BitBlt(),StretchBlt() скидываем ее в контекст окна при наступлении WM_NCPAINT. Все остальное один к одному! (настройки одни и те же и т.д. проект – копия Варианта 1 smile ).  Ну думаю теперь будет летать...  smile  smile 
Собираем Release сомотрим через диспетчер загрузку ЦП при изменении размеров окна = 50-75%!!! т.е. в 2 раза больше!!!  smile  smile  smile  smile  smile 

Не ужели при полной отрисовке (при каждом WM_NCPAINT) + один Bitblt всей картинки тратся меньше времени, чем при рисовании один раз и дроблении на 8 частей? Почему так? Что это так = 100% (если судить по загрузке ЦП). smile 

PM MAIL   Вверх
mekhanikus
Дата 29.9.2008, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вольноопределяющийся
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 16.6.2008
Где: Спасск-Дальний

Репутация: 1
Всего: 1



Можно предположить, что много хавает StretchBlt().
Попробуй временно убрать Stretch, и посмотри, что получиться.
А, может и не надо бордюры окна ресайзить так рьяно? Что ты пытаешся в них рисовать?
PM MAIL   Вверх
Earnest
Дата 30.9.2008, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Есть такое умное слово "Профайлер"...
Несколько лет назад боролась за оптимизацию вывода графики (плюс пересчет координат), там вопрос стоял об инлайн-не инлайн, виртуал-не виртуал и т.д. Убедилась, что как только появлется хоть мало-мальский ГУИ-вызов (даже такой пустяк, казалось бы, как SelectObject) - вся разница между виртуальным, инлайновым и т.д. исчезает на его фоне... Вывод - лучше один "тяжелый" ГУИ-вызов чем 5 "легких".... 
Думаю, что и сейчас ничего не изменилось в этом смысле.


--------------------
...
PM   Вверх
Paspartu
Дата 5.10.2008, 03:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 3.5.2007

Репутация: нет
Всего: нет



Earnest, спасибо за разъяснение! 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0625 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.