FireMonkey性能问题

Vib*_*nRC 8 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.
Run Code Online (Sandbox Code Playgroud)

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

然后我修改了我的代码

  GlobalUseHWEffects := true  ;
  GlobalUseDirect2D := False  ;
  GlobalUseDirect2DSoftware := False    ;
  GlobalUseGDIPlusClearType := True    ;
  GlobalDisableFocusEffect := True   ;
Run Code Online (Sandbox Code Playgroud)

现在一切顺利,只有一小段时间的节省时间和CPU使用率非常低(0 - 2%).(这就是我需要Firemonkey的原因)

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

我能做些什么才能解决这个问题.

Vib*_*nRC 2

真正的问题是一些 Firemonkey Effects 和 Firemonkeys 默认设置

默认GlobalUseDirect2D = truewhile 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;
Run Code Online (Sandbox Code Playgroud)

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

通过GlobalDisableFocusEffect你将不再能够使用效果(例如:outergloweffect)....但同样,这个说法仍然不再正确....

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

例如

  1. windows风格中按钮风格的Tinnergloweffect是冻结的原因
  2. 深色风格中 headeritemstyle 中的 Tinnerglow 效果是冻结的原因。

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

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