我的默认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的原因)
现在除了菜单栏之外,所有控件都按预期工作,上面的设置不适用于菜单栏并且它正在使用默认行为(整个应用程序冻结几秒钟).
我能做些什么才能解决这个问题.
解决方法
默认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这样的本机很酷