CreateWindowEx () медленно на Windows-7 (иногда) - PullRequest
3 голосов
/ 10 ноября 2010

У меня проблемы с производительностью в Windows-7 (и, возможно, в Vista), с вызовами CreateWindowEx ().

Некоторые окна, которые я создаю, занимают намного дольше в Windows-7, чем в XP.Время может достигать 15-25 мс, что очень много, когда вам нужно создать много.(Время на XP постоянно равно 0-2 мс.) Почему это?и что можно сделать?

Все окна созданы в одном потоке.Некоторые встроены в оконные классы, некоторые мои.Мне кажется, что все окна с WS_POPUP [EDIT: и WS_EX_TOOLWINDOW] страдают от этой задержки, а все окна без нее - нет.(Но фактической причиной, конечно же, может быть какое-то другое свойство.) Кажется, это применимо ко всем моим окнам, кроме элемента управления RICHEDIT_CLASS, который является единственным, который непостоянно изменяется между 1-30 мс, но только на 7. Спасибо!

[РЕДАКТИРОВАТЬ: приложение больше всего страдает от многих (~ 300) всплывающих подсказок, созданных при создании главного окна, с использованием gToolTip .Я мог бы отложить создание всплывающей подсказки, пока не появится окно, но у меня есть другие «злые» окна, и я все еще хотел бы точно понять, что происходит]

ОБНОВЛЕНИЕ: Моя проблема с инструментом-Советы значительно улучшены.Класс-обертка, который я использовал из CodeProject, не подходит [для вызова 300 раз, по одному разу для каждого элемента управления], так как он создает новое окно для каждого вызова.Хитрость заключается в том, чтобы создать одно окно с подсказкой (для каждого всплывающего окна), а затем отправлять ему только TTM_ADDTOOL-сообщение для каждого элемента управления.

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

Ответы [ 2 ]

2 голосов
/ 10 ноября 2010

Поскольку вы упомянули WS_POPUP, он может иметь отношение к стилю класса CS_SAVEBITS, если вы создаете окна с установленным WS_VISIBLE.

CS_SAVEBITS (0x0800)

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

1 голос
/ 10 ноября 2010

Отключите Aero, если хотите вернуть его обратно к XP. Его функция композитинга, которая позволяет такие вещи, как стекло и живые миниатюры, не предоставляется бесплатно.

...