创建表单的优化

non*_*one 0 delphi optimization delphi-2009

创建和显示表单需要10秒钟,我想缩短流程.

部分是

  Inherited Create(AOwner);
Run Code Online (Sandbox Code Playgroud)

这比总运行时间少了2秒.

有没有办法缩短Delphi TForm的父创建?或者你知道通话时间增加的原因是什么

Inherited Create(AOwner);
Run Code Online (Sandbox Code Playgroud)

更新:我没想到18条评论和3条答案:D谢谢大家的回复.

在目前的状态,我厌倦了一些围绕这里的轮廓,并且没有导致代码中的实际代码行,它主要是内核调用或系统调用.

所以在购买了AQTime附带的Delphi XE2后,我试图将项目升级到Delphi XE2,现在需要几天时间.(BIG PROJECT)

我从Profiler获取信息时添加信息.

BTW,在Windows服务器域之外,使动作慢两倍.内置电脑在5秒内运行.哪个更好,但仍然很慢.

Update2:使用Delphi XE2进行编译和运行的时间偏好比Delphi 2009提高了近20%.AQTime没有产生任何有用的信息.

update3:左xe2,不稳定.回到delphi 2009那里尝试了构造函数的开头

  SendMessage(application.Handle, WM_SETREDRAW, 0, 0);
Run Code Online (Sandbox Code Playgroud)

并在构造函数的最后

  SendMessage(application.Handle, WM_SETREDRAW, -1, 0);
  form.Repaint;
Run Code Online (Sandbox Code Playgroud)

减少了0.1秒.

Fra*_*ois 9

从经验看到业务形式滥用组件:

  1. DataBase活动:您具有活动的数据库组件,并且需要数据库打开和/或获取数据.显而易见的是,当您的表单包含DBConnections或DataSet在设计时保持活动状态时,或者,更狡猾的是,您在TDBEdit其他地方(在DataModule中)链接到某些DataSource的DB感知组件(例如)并且这些组件保持活动状态.
    补救措施:Active=False在设计时将所有数据集和连接放入,并在首次需要时激活.

  2. OnCreate事件(或调用链):您的任何组件OnCreate事件处理程序中的代码太多或速度太慢(或者它们调用/触发慢/长的其他事件).最常见的是文件操作,如处理大量INI文件,繁重的XML存储或Excel电子表格.
    补救措施:追捕他们并尝试推迟直到你真正需要他们.

  3. 不必要的事件处理程序调用:事件在Create期间被多次触发,没有任何有用的理由(并经常相互调用).使用分析器进行检测和计数.
    补救措施:停用事件直到它们有用.

最后的手段:如果你不能让它更快,改变用户的感知.
放置一个快速打开的启动画面,其中有一些可以看到或读取的东西,可以在与MainForm开放的大致相同的时间内吸引用户的注意力.