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

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

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

解决方法

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

认GlobalUseDirect2D = true而GlobalUseHWEffects:= true是性能问题的真正原因,两者都在我的机器中同时使用cpu和GPU.因此将其中一个设置为false.我建议您使用GlobalUseDirect2D = false和GlobalUseHWEffects:= true以减少cpu的使用.

现在你也可以获得改进的字体(firemonkey可以生成的最好的字体)

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

我使用的是英特尔移动图形芯片,所以我认为我的所有功能都不能支持所有的firemonkey效果.在FMX.Types中可以看到代码和注释

// On low-end hardware or mobile bitmap effects are slowly
  GlobaldisableFocusEffect: Boolean = False;

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

通过GlobaldisableFocusEffect你将无法再使用效果(例如:outergloweffect)….但是这个声明仍然不再是真的….

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

例如

> Windows风格中按钮样式的Tinnergloweffect是冻结的原因
>在黑暗风格的标题样式中的Tinnergloweffect是冻结的原因.

可能有很多例子……

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

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...