CreateWindowEx()在Windows-7上慢(有时候)

时间:2010-11-10 16:52:49

标签: performance winapi windows-7 windows-xp

我在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消息。

因此,性能得到了很大改善,但其他窗口仍然存在明显的延迟......

2 个答案:

答案 0 :(得分:2)

由于您提到了WS_POPUP,如果您要创建设置为WS_VISIBLE的窗口,则可能与CS_SAVEBITS类样式有关。

  

CS_SAVEBITS(0x0800)

     

以位图的形式保存由此类窗口遮挡的屏幕图像部分。 ...这种样式增加了显示窗口所需的时间,因为系统必须首先分配内存来存储位图。

答案 1 :(得分:1)

如果你想将它变回XP,请关闭Aero。它的合成功能支持像玻璃和实时缩略图这样的东西 not 免费提供。