我在Windows-7(可能是Vista)上遇到了非常糟糕的性能问题,并调用了CreateWindowEx()。
我正在创建的一些窗口在Windows-7中比XP强多。时间可以高达15-25毫秒,当你需要创建许多时,这很多。 (XP上的时间一直是0-2毫秒。)这是为什么?什么可以做?
所有窗口都在同一个线程中创建。有些是在窗口类中构建的,有些是我自己的。对我而言,似乎所有带有WS_POPUP [EDIT:和WS_EX_TOOLWINDOW]的窗口都会受到这种延迟的影响,而没有它的所有窗口都没有。 (但实际原因当然可能是其他一些属性。)这似乎适用于我的所有窗口,除了RICHEDIT_CLASS控件,这是唯一一个在1-30毫秒之间不一致但在7之间不一致的控件。 谢谢!
[编辑:应用程序在使用gToolTip创建主窗口时创建的许多(约300个)工具提示中受到的影响最大。我可以延迟工具提示创建,直到窗口显示,但我有其他“邪恶”的窗口,我仍然想要了解到底发生了什么]
更新:我的工具提示问题大大改善了。我在CodeProject中使用的包装类不适合[被调用300次,每个控件一次],因为它为每个调用创建一个新窗口。诀窍是创建一个工具提示窗口(对于每个弹出窗口),然后只为每个控件发送一个TTM_ADDTOOL消息。
因此,性能得到了很大改善,但其他窗口仍然存在明显的延迟......
答案 0 :(得分:2)
由于您提到了WS_POPUP
,如果您要创建设置为WS_VISIBLE
的窗口,则可能与CS_SAVEBITS
类样式有关。
CS_SAVEBITS(0x0800)
以位图的形式保存由此类窗口遮挡的屏幕图像部分。 ...这种样式增加了显示窗口所需的时间,因为系统必须首先分配内存来存储位图。
答案 1 :(得分:1)
如果你想将它变回XP,请关闭Aero。它的合成功能支持像玻璃和实时缩略图这样的东西 not 免费提供。