我正在使用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的原因)
现在除了菜单栏之外,所有控件都按预期工作,上面的设置不适用于菜单栏并且它正在使用默认行为(整个应用程序冻结几秒钟)。
我能做些什么来克服这个问题。
答案 0 :(得分:1)
真正的问题是一些firemonkey效果和Firemonkey默认设置
默认GlobalUseDirect2D = true
而GlobalUseHWEffects := true
是造成性能问题的真正原因,两者都在我的机器中同时使用CPU和GPU。因此将其中一个设置为false。我建议您执行GlobalUseDirect2D = false
和GlobalUseHWEffects := 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 并非所有效果都已停用,
例如
可能有很多例子......
所以在我的场景中我被迫从样式中移除所有效果..,Blend,Dark样式工作得更好因为它们使用较少的TEffects(?),但现在我有一个更好的GUI具有更好的性能(我感觉混合和黑暗风格看起来比UI本身更酷