FireMonkey性能问题

时间:2012-06-04 07:58:13

标签: delphi firemonkey

我正在使用Delphi XE2和更新4修补程序1

我的默认FMX应用程序表示非常慢,并且在事件发生时它会冻结一段时间。例如:当我点击一个按钮时,整个应用程序会冻结几秒钟(但仅限于该事件的第一次执行)。所以我认为这可能是一个GPU问题,并将我的默认 Dpr 文件编辑为;

uses
  FMX.Forms,  fmx.Types,..

{$R *.res}

begin
  Application.Initialize;

  GlobalUseHWEffects := False   ;
  GlobalUseDirect2D := False  ;
  GlobalUseDirect2DSoftware := False    ;
  GlobalUseGDIPlusClearType := True    ;
  GlobalDisableFocusEffect := True   ;

  Application.CreateForm(...);
  Application.Run;
end.

现在它按预期运行没有任何问题,但CPU使用率与之前一样(移动鼠标时为25%)

然后我将我的代码修改为

  GlobalUseHWEffects := true  ;
  GlobalUseDirect2D := False  ;
  GlobalUseDirect2DSoftware := False    ;
  GlobalUseGDIPlusClearType := True    ;
  GlobalDisableFocusEffect := True   ;

现在一切都顺利进行,只有很小的延迟时间和CPU使用率非常低(0 - 2%)。(这就是我需要Firemonkey的原因)

现在除了菜单栏之外,所有控件都按预期工作,上面的设置不适用于菜单栏并且它正在使用默认行为(整个应用程序冻结几秒钟)。

我能做些什么来克服这个问题。

1 个答案:

答案 0 :(得分:1)

真正的问题是一些firemonkey效果和Firemonkey默认设置

默认GlobalUseDirect2D = trueGlobalUseHWEffects := true是造成性能问题的真正原因,两者都在我的机器中同时使用CPU和GPU。因此将其中一个设置为false。我建议您执行GlobalUseDirect2D = falseGlobalUseHWEffects := true以减少对CPU的使用。

And now you will be also able to get improved fonts (best ever firemonkey can generate)

并非所有客户都拥有高端的图形GPU

我正在使用英特尔移动图形芯片,因此我认为我的所有功能都不具备支持所有firemonkey效果的能力。在FMX.Types

中可以看到 代码和评论
// On low-end hardware or mobile bitmap effects are slowly
  GlobalDisableFocusEffect: Boolean = False;

但是我无法理解为什么他们默认将它设为 false 。(因此启用和禁用取决于客户端GPU功能)

通过 GlobalDisableFocusEffect ,你将无法再使用效果(例如: outergloweffect )....但是这句话仍然不再真实...... / p>

GlobalDisableFocusEffect 并非所有效果都已停用,

例如

  1. Windows风格的按钮样式中的Tinnergloweffect是冻结的原因
  2. 黑暗风格的标题样式中的Tinnergloweffect是冻结的原因。
  3. 可能有很多例子......

    所以在我的场景中我被迫从样式中移除所有效果..,Blend,Dark样式工作得更好因为它们使用较少的TEffects(?),但现在我有一个更好的GUI具有更好的性能(我感觉混合和黑暗风格看起来比UI本身更酷