【问题标题】:CreateWindowEx() Slow On Windows-7 (Sometimes)CreateWindowEx() 在 Windows-7 上运行缓慢(有时)
【发布时间】:2010-11-10 16:52:48
【问题描述】:

在调用 CreateWindowEx() 时,我在 Windows-7(可能还有 Vista)上遇到了非常糟糕的性能问题。

我正在创建的一些窗口在 Windows-7 中比 XP 花费的时间。时间可能高达 15-25 毫秒,当您需要创建很多时,这已经很长了。 (XP 上的时间始终为 0-2 毫秒。)这是为什么呢?可以做什么?

所有窗口都在同一个线程中创建。有些是在窗口类中构建的,有些是我自己的。对我来说,似乎所有带有 WS_POPUP [EDIT: and WS_EX_TOOLWINDOW] 的窗口都会受到这种延迟的影响,而没有它的所有窗口都不会。 (但实际原因当然可能是其他一些属性。)这似乎适用于我的所有窗口,除了 RICHEDIT_CLASS 控件,这是唯一一个在 1-30 毫秒之间不一致变化的控件,但仅在 7 上。 谢谢!

[编辑:该应用程序在创建主窗口时使用gToolTip 创建了许多(~300)工具提示。我可以延迟工具提示的创建,直到显示窗口,但我还有其他“邪恶”窗口,我仍然想了解到底发生了什么]

更新:我的工具提示问题得到了极大改善。我从 CodeProject 使用的包装类不适合 [被调用 300 次,每个控件一次],因为它为每次调用创建一个新窗口。诀窍是创建一个工具提示窗口(为每个弹出窗口),然后只为每个控件发送一个 TTM_ADDTOOL 消息。

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

【问题讨论】:

    标签: performance winapi windows-7 windows-xp


    【解决方案1】:

    由于您提到了WS_POPUP,如果您使用WS_VISIBLE 设置创建窗口,它可能与CS_SAVEBITS 类样式有关。

    CS_SAVEBITS (0x0800)

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

    【讨论】:

    • 感谢您的想法,但遗憾的是,没有一个 [evil] 窗口是可见的。有些有 CS_SAVEBITS,有些没有……我观察到的唯一常见属性是 WS_POPUP 和 WS_EX_TOOLWINDOW。请参阅上面的编辑...
    【解决方案2】:

    如果您想将 Aero 还原为 XP,请关闭它。它的合成功能支持玻璃和实时缩略图等内容不是免费提供的。

    【讨论】:

    • 恐怕这不是解决办法。我们不能指望我们所有的用户都这样做。
    • 是的,用户可能如此不合理:)
    • 由于我们的应用程序在 XP 上运行良好,我宁愿告诉他们下载一个 XP-crack 并卸载 Windows-7:p
    • 不管怎样,Aero 已关闭。所以这根本不是一个因素。
    猜你喜欢
    • 1970-01-01
    • 2012-01-28
    • 2017-09-04
    • 2016-09-28
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多