小编nex*_*ial的帖子

屏幕上有很多控件时严重的FireMonkey性能问题

我们已经有一段时间在办公室与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)

delphi performance firemonkey

43
推荐指数
2
解决办法
1万
查看次数

标签 统计

delphi ×1

firemonkey ×1

performance ×1