我们已经有一段时间在办公室与FireMonkey合作了.经过一段时间后,我们注意到,由于Embarcadero告诉我们GPU加速,它并不是那么闪电.
因此,我们构建了一个基本应用程序,仅用于测试FireMonkey性能.基本上它是一个底部有一个面板(alBottom)的表单,它作为状态栏和一个所有客户端(alClient)面板.底部的面板有一个进度条和一个动画.
我们在表单中添加了一个方法,该方法释放了所有客户端面板中存在的任何控件,并使用自定义类型和"鼠标悬停"样式的单元格来实现它,并更新动画,进度条和表单的标题以及有关的信息.实现进步.最重要的信息是所需的时间.
最后,我们将这种方法添加到表单的OnResize中,运行应用程序并最大化表单(1280x1024).
XE2的结果非常慢.花了大约11秒钟.此外,由于面板完成直到应用程序准备好接收用户输入,因此存在大约10秒的额外延迟(如冷冻).整体为21秒.
随着XE3,情况变得更糟.对于相同的操作,总共需要25秒(14 + 11冻结).
有传闻称XE4将是XE3中最糟糕的.
考虑到完全相同的应用程序,使用VCL而不是FireMonkey并使用SpeedButtons以获得相同的"鼠标悬停效果"仅需1.5秒!所以问题显然存在于一些内部FireMonkey引擎问题中.
我开了一个QC(#113795)和一张(付费)票给embarcadero支持,但没有什么他们不会解决它.
我真的不明白他们怎么能忽视这么重的问题.因为我们的企业是一个显示阻止和交易破坏者.我们不能以如此糟糕的表现向我们的客户提供商业软件.早些时候或早些时候我们将被迫转移到另一个平台(顺便说一句:相同的代码Delphi Prism with WPF需要1.5秒作为VCL).
如果有人知道如何解决问题或尝试提高测试性能并希望提供帮助,我会很高兴.
先感谢您.
布鲁诺弗拉蒂尼
该申请如下:
unit Performance01Main;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Rtti, System.Classes,
System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Objects;
const
cstCellWidth = 45;
cstCellHeight = 21;
type
TCell = class(TStyledControl)
private
function GetText: String;
procedure SetText(const Value: String);
function GetIsFocusCell: Boolean;
protected
FSelected: Boolean;
FMouseOver: Boolean;
FText: TText;
FValue: String;
procedure ApplyStyle; override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Single); override;
procedure DoMouseEnter; override; …
Run Code Online (Sandbox Code Playgroud)