我正在使用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的原因)
现在所有控件都按预期工作,除了菜单栏,上面的设置不适用于菜单栏,它正在使用默认行为(整个应用程序冻结几秒钟).
我能做些什么才能解决这个问题.
真正的问题是一些 Firemonkey Effects 和 Firemonkeys 默认设置
默认GlobalUseDirect2D = truewhile 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;
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么他们默认设置为false。(因此启用和禁用取决于客户端 GPU 功能)
通过GlobalDisableFocusEffect你将不再能够使用效果(例如:outergloweffect)....但同样,这个说法仍然不再正确....
通过GlobalDisableFocusEffect并非所有效果都被禁用,
例如
可能有很多例子......
所以在我的场景中,我被迫删除样式中的所有效果.., Blend , Dark 样式工作得更好,因为它们使用更少的 TEffects (?),但现在我有一个更好的 GUI 和更好的性能(我觉得 Blend 和深色风格看起来比原生 UI 更酷)
| 归档时间: |
|
| 查看次数: |
4471 次 |
| 最近记录: |