9

我正在使用带有更新 4 修补程序 1 的 Delphi XE2

我的默认 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 的原因)

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

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

4

1 回答 1

1

真正的问题在于一些 firemonkey Effects 和 Firemonkeys 默认设置

默认GlobalUseDirect2D = true虽然 GlobalUseHWEffects := 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;

但我不明白为什么他们默认设置为。(所以启用和禁用取决于客户端 GPU 功能)

通过GlobalDisableFocusEffect,您将无法再使用 Effects(例如:outergloweffect)....但是,这句话仍然不再正确....

通过GlobalDisableFocusEffect并非所有效果都被禁用,

例如

  1. Windows 样式中按钮样式中的 Tinnerglow 效果是冻结的原因
  2. 深色样式中 headeritemstyle 中的 Tinnerglow 效果是冻结的原因。

可能有很多例子......

因此,在我的场景中,我被迫从样式中删除所有效果..,Blend,Dark 样式效果更好,因为它们使用的 TEffects (?) 更少,但现在我拥有更好的 GUI 和更好的性能(我觉得 Blend 和深色样式看起来比原生 UI 更酷)

于 2012-06-04T13:06:08.330 回答