среда, февраля 22, 2006

Некоторые программы работают быстрее, если кликнуть на заголовок окна

"Такая ситуация возможна, если программа слишком много времени отводит на то, чтобы рапортовать о прогрессе, но недостаточно времени тратит собственно на работу." (Хех, я знаю людей, которые поступают так же :-) ). "Когда вы кликаете на заголовок окна и продолжаете удерживать клавишу мыши, менеджер окон ожидает следующее сообщение от мышки, чтобы понять - вы просто кликнули на заголовок окна или собираетесь окно куда-то тащить. Во время этого ожидания отрисовка окна приостанавливается.
Из-за этого программа начинает работать быстрее. Отсутствие перерисовок означает, что меньше CPU тратится на перерисовку того, что вы все равно бы не заметили.
"

Речь идет об ОС Windows, оригинал заметки тут: Why does my program run faster if I click and hold the caption bar?. Звучит как анекдот, но на блоге Реймонда Чена есть примеры программ, можно проверить.

6 коммент.:

Анонимный комментирует...

Хм... Я именно сегодня заметил то же самое! =))

Анонимный комментирует...

В отладочной версии одного приложения, интенсивно использующего Direct3D, резко прыгал FPS каждый раз, когда в фоне был запущен World of Warcraft. Часа четыре я потратил на изучение собственного кода и попытки выяснить, в чем же дело. В общем, было достаточно обидно, когда выяснилось, что дело всего лишь в твикере видеокарты, который активизирует соответствующий "скоростной" профиль на запуске WoW. Я-то рассчитывал обнаружить какой-то особый подход, позволяющий бесплатно поднять производительность приложения =)

Анонимный комментирует...

Насколько я понимаю, то пока держишь caption работает другой message loop, тот что внутри условно говоря DefWindowProc(WM_SYSCOMMAND, а не стандартный от работающей программы. Другая обработка сообщений и вполне возможна другая скорость работы.

Анонимный комментирует...

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

Ivan Sagalaev комментирует...

Проблема в том, что в общем случае "сравнение" отрисованного -- задача того же порядка времени, что и рисование.

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

Анонимный комментирует...

у меня программа работает по таймеру, а при щелчке по заголовку оказалось он останавливается :-(