2009-12-04 38 views
2

在尝试更新旧C++ Builder/Delphi应用程序的外观时,我启用了视觉主题(visual styles),并对添加了多少性能主题感到惊讶。例如,我们的主要设置页面(我们不希望立即重做的开发时间和成本再培训的原因有11片,200控制怪物对话):启用XP视觉主题/视觉样式会导致性能下降

  • 没有主题启用:〜0.1秒构建表单及其控件(由QueryPerformanceCounter测量),〜0.9秒从点击菜单项目到所显示的表格(如秒表测量)。对最终用户来说不是很明显。
  • 启用主题:〜0.6秒构建窗体及其控件,〜1.5秒从点击菜单项到所显示的窗体。对最终用户非常明显。

我在Windows XP桌面和Windows 7虚拟机上获得了类似的结果。

我意识到我可以采取一些措施来改善这种特殊情况(例如,懒惰地加载对话框的标签页或重新设计它的完整版),但是对于主题添加如此显着的性能影响通常是典型的?有没有简单的建议来避免这种性能下降?

+0

您是否将性能问题追踪到一个特定的事情,还是它的组合? – 2009-12-07 18:12:32

+0

没有一件事;根本问题显然只是形式太大而已。 BeginUpdate/EndUpdate帮助,我会考虑创建一次对话框,而不是按需为我们的下一个版本创建。谢谢你的帮助。 – 2009-12-07 19:16:26

回答

3

哇。我不确定我是否曾经在单一表格上使用过200个控件。这里有几个建议。要当一次创建对话框应用程序启动并需要的,而不是需求创造它时,它显示

  • 这可能是一个特例。

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

  • 在OnResize事件或类似事件中,是否有任何代码被触发多次,可能会等到表单创建并运行一次后才会触发?

  • 您使用的是什么样的控件?如果某种控件的绘制速度特别慢,您可以用更快速的绘画替换它。不过,这需要进行一些测试。

1

你可以尝试打开doublebuffering上的控制,我们有很多相同的行为,它是有点这种做法加快了,但采用应用主题化支持之前也没办法表现。

+0

最后回到这个...窗体上的双缓冲没有帮助(并且实际上使TPageControl画图不正确)。我还没有尝试在单个控件上使用双缓冲,但延迟似乎是在创建控件,而不是绘制它们。 – 2009-12-14 21:10:27