代码之家  ›  专栏  ›  技术社区  ›  Josh Kelley

启用xp视觉主题/视觉样式会降低性能

  •  2
  • Josh Kelley  · 技术社区  · 15 年前

    当试图使一个旧的C++Builder/Delphi应用程序的外观现代化时,我启用了可视化主题。 visual styles )令人惊讶的是,性能上的热门主题增加了多少。例如,对于我们的主设置页面(11个选项卡,200个控制怪物对话框,由于开发时间和再培训成本的原因,我们现在不想重做它):

    • 未启用主题: 0.1秒 构造窗体及其控件(由QueryPerformanceCounter度量), 0.9秒 从单击菜单项到显示的窗体(由秒表测量)。对最终用户不太明显。
    • 启用主题: 0.6秒 构造窗体及其控件, 1.5秒 从单击菜单项到显示的窗体。对最终用户非常明显。

    我在WindowsXP桌面和Windows7VM上都得到了类似的结果。

    我意识到,我可以采取一些步骤来改进这个特定的情况(例如懒散地加载对话框的选项卡或完全重新设计它),但是主题添加如此显著的性能冲击是典型的吗?有没有简单的建议来避免这种性能冲击?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Bruce McGee    15 年前

    真的。我不确定我是否在一个窗体上有200个控件。以下是一些建议。

    • 这可能是一种特殊情况,您希望在应用程序启动时创建一次对话框,并在需要时显示它,而不是按需创建它。

    • 我还将查看构造函数或OnShow事件中发生了什么。您是否在填充BeginUpdate/EndUpdate占优势的列表?

    • 在onResize事件或类似事件中,是否有任何代码被多次激发,这些代码可以等到创建表单并运行一次之后再激发?

    • 你在使用什么样的控件?如果一种控制类型的绘制速度特别慢,则可以用绘制速度更快的控制类型替换它。不过,这需要一些测试。

        2
  •  1
  •   mmmm    15 年前

    您可以尝试在控件上打开DoubleBuffering,我们有很多相同的行为,并且这种方法稍微加快了速度,但在采用应用程序主题化支持之前没有达到性能。

    推荐文章