2

在尝试使旧的 C++Builder / Delphi 应用程序的外观现代化时,我启用了视觉主题(视觉样式),并且对添加了多少性能影响主题感到惊讶。例如,对于我们的主要设置页面(一个 11 个选项卡、200 个控件的怪物对话框,由于开发时间和再培训成本的原因,我们现在不想重做):

  • 未启用主题:构造表单及其控件约 0.1 秒(由 QueryPerformanceCounter 测量),从单击菜单项到显示表单约 0.9 秒(由秒表测量)。对最终用户来说并不是很明显。
  • 启用主题:~0.6 秒构建表单及其控件,~1.5 秒从单击菜单项到显示表单。对最终用户来说非常明显。

我在 Windows XP 桌面和 Windows 7 VM 上都得到了类似的结果。

我意识到我可以采取一些措施来改进这种特殊情况(例如延迟加载对话框的选项卡或完全重新设计它),但是主题通常会增加如此明显的性能影响吗?有什么简单的建议可以避免这种性能损失吗?

4

2 回答 2

3

哇。我不确定我曾经在一个表单上拥有 200 个控件。这里有几个建议。

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

  • 我还要看看构造函数或 OnShow 事件中发生了什么。您是否填充了 BeginUpdate/EndUpdate 具有优势的任何列表?

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

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

于 2009-12-04T22:48:02.897 回答
1

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

于 2009-12-08T21:17:50.283 回答