"Такая ситуация возможна, если программа слишком много времени отводит на то, чтобы рапортовать о прогрессе, но недостаточно времени тратит собственно на работу." (Хех, я знаю людей, которые поступают так же :-) ). "Когда вы кликаете на заголовок окна и продолжаете удерживать клавишу мыши, менеджер окон ожидает следующее сообщение от мышки, чтобы понять - вы просто кликнули на заголовок окна или собираетесь окно куда-то тащить. Во время этого ожидания отрисовка окна приостанавливается.
Из-за этого программа начинает работать быстрее. Отсутствие перерисовок означает, что меньше CPU тратится на перерисовку того, что вы все равно бы не заметили."
Речь идет об ОС Windows, оригинал заметки тут: Why does my program run faster if I click and hold the caption bar?. Звучит как анекдот, но на блоге Реймонда Чена есть примеры программ, можно проверить.
среда, февраля 22, 2006
Некоторые программы работают быстрее, если кликнуть на заголовок окна
в 13:42:00
Категории: programming
Подписаться на:
Комментарии к сообщению (Atom)
6 коммент.:
Хм... Я именно сегодня заметил то же самое! =))
В отладочной версии одного приложения, интенсивно использующего Direct3D, резко прыгал FPS каждый раз, когда в фоне был запущен World of Warcraft. Часа четыре я потратил на изучение собственного кода и попытки выяснить, в чем же дело. В общем, было достаточно обидно, когда выяснилось, что дело всего лишь в твикере видеокарты, который активизирует соответствующий "скоростной" профиль на запуске WoW. Я-то рассчитывал обнаружить какой-то особый подход, позволяющий бесплатно поднять производительность приложения =)
Насколько я понимаю, то пока держишь caption работает другой message loop, тот что внутри условно говоря DefWindowProc(WM_SYSCOMMAND, а не стандартный от работающей программы. Другая обработка сообщений и вполне возможна другая скорость работы.
И что печально - на всей цепочке вызовов не оказывается ни одного лентяя, который отказался бы обновлять/перерисовывать данные, равные уже отрисованным.
Нерусские делали...
Проблема в том, что в общем случае "сравнение" отрисованного -- задача того же порядка времени, что и рисование.
А не в общем случае программист волен оптимизировать это у себя как угодно. Только вот не занимается этим почти никто, потому что реальная отдача обычно существенно ниже затраченных ресурсов.
у меня программа работает по таймеру, а при щелчке по заголовку оказалось он останавливается :-(
Отправить комментарий