FireMonkey性能问题

9
我正在使用更新了热修复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)

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

我该怎么解决这个问题。


这实际上是一个弹出菜单的问题,而菜单栏使用弹出菜单。 - VibeeshanRC
抱歉,由于这个错误,所有的操作只能在暗色主题下正常工作,而不能在Windows主题下工作。 - VibeeshanRC
1个回答

2

真正的问题在于一些Firemonkey效果和Firemonkeys默认设置

默认情况下,GlobalUseDirect2D = true,而GlobalUseHWEffects := true是性能问题的真正原因,在我的机器上启用两者都会使用CPU和GPU。因此,请将它们中的一个设置为false。我建议你将GlobalUseDirect2D = falseGlobalUseHWEffects := true 以减少CPU的使用。

现在,您也将能够获得改进的字体(Firemonkey可以生成最佳字体)

并非所有客户都拥有高端图形处理器

我正在使用Intel移动显卡,因此我认为我的显卡可能没有支持所有Firemonkey效果的全部功能。以下代码和注释可以在FMX.Types中看到。

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

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

通过 GlobalDisableFocusEffect ,您将无法再使用效果(例如: outergloweffect )....但是这个说法现在已经不再正确了....

通过 GlobalDisableFocusEffect 并不是所有的效果都被禁用了,

例如

  1. 在Windows样式的按钮样式中的Tinnergloweffect是导致冻结的原因
  2. 在Dark样式的headeritemstyle中的Tinnergloweffect是导致冻结的原因。

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

所以在我的情况下,我被迫从样式中删除所有效果..,Blend,Dark样式的工作效果更好,因为它们使用较少的TEffects (?),但现在我拥有了更好的GUI和更好的性能(我觉得Blend和Dark样式看起来比本地UI酷)


以上答案仅适用于仍然遇到热修补程序1问题的人,但我仍然认为“GlobalUseDirect2D = true while GlobalUseHWEffects := true”对所有人都是一个问题,因为它同时使用GPU和CPU。如果我错了,请纠正我,这是我在我的英特尔GPU上测试得出的结论。 - VibeeshanRC
@RBA,还没有。我不认为他们会将其视为一个bug。 - VibeeshanRC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接