如何提高Delphi应用的启动速度(或缩短启动时间)?
除了特定于应用程序之外,是否有一个始终有效的标准技巧?
注意:我不是在谈论快速算法等。在速度方面,只有启动时的性能提升。
答案 0 :(得分:27)
在项目选项中,不要预先自动创建所有表单。根据需要创建并释放它们。
答案 1 :(得分:19)
尝试在主窗体的OnCreate事件中尽可能少地执行 。相反,将一些初始化移动到另一种方法,并在向用户显示表单后执行此操作。应用程序忙于繁忙的鼠标光标的指示器很长。
完成的实验表明,如果您使用完全相同的应用程序并只是向其添加启动通知,用户实际上会认为该应用程序启动速度更快!
除此之外,您可以在编译器中执行常规操作,例如排除调试信息并启用优化。
除此之外,不会自动创建所有表单。根据需要动态创建动态。
答案 2 :(得分:17)
好吧,正如Argalatyr建议我将我的评论改为单独的答案:
作为“不要自动创建表单”答案的扩展(这本身就非常有效)我建议延迟打开与数据库,互联网,COM服务器和任何外围设备的连接,直到您首先需要它为止。< / p>
答案 3 :(得分:13)
在您的表单显示之前发生了三件事:
正如其他人所指出的那样,你应该只自动创建少量的表单(特别是如果它们是具有大量组件的复杂表单),并且不应该在这些表单的OnCreate事件中进行冗长的处理。如果您的主要形式非常复杂,您应该重新设计它。一种可能性是将主表单拆分为多个按需加载的帧。
其中一个初始化块也可能需要一些时间来执行。要验证,请在程序的第一行放置断点(.dpr文件中的主“begin..end”块)并启动程序。将执行所有初始化块,然后断点将停止执行。
以类似的方式,你可以在主程序上步骤(F8) - 你会看到每个自动创建的表单需要多长时间。
答案 4 :(得分:4)
显示启动画面,这样人们就不会注意到启动时间长:)。
答案 5 :(得分:2)
最快的代码 - 它是从未运行的代码。很明显,真的;)
答案 6 :(得分:2)
应用程序的部署可以(通常会!)以开发人员可能没有考虑过的方式进行。根据我的经验,这会产生比任何人想要的更多性能问题。
常见的瓶颈是文件访问 - 启动应用程序所需的配置文件,ini文件可以在开发人员计算机上很好地执行,但在不同的部署情况下执行得非常糟糕。同样,应用程序日志记录会阻碍性能 - 无论是出于文件访问原因还是日志文件增长。
我经常看到在Citrix环境或共享网络驱动器上部署的富客户端应用程序,基础架构团队决定将用户临时文件或个人文件存储在应用程序发现问题的位置,这会导致性能或稳定性问题。
我经常看到影响应用程序性能的另一个问题是用于将数据导入和导出到文件的方法。通常在Delphi业务应用程序中,我看到可以使用DataSet的导出函数 - 迭代和写入文件。考虑用于写入文件的方法,考虑可用内存,考虑写入/读取的“文件夹”可能是本机的本地,也可能是远程服务器上的。
开发人员可能会认为这些是安装问题,超出了他们关注的范围。在将这类问题确定为“基础设施问题”之前,我经常会看到许多开发人员分析周期。
答案 7 :(得分:2)
答案 8 :(得分:2)
放置必须在线程启动时执行的长时间运行的任务(打开数据库连接,连接到app服务器等)。在线程完成之前,任何依赖于这些任务的功能都将被禁用。
但是,这有点像作弊。主要形式立即出现,但你只是给出了更快的启动时间。答案 9 :(得分:2)
使用ASPack或UPX之类的内容压缩您的可执行文件和任何dll。减速时间可以通过更快的加载时间来弥补。
UPX被用作如何更快地加载FireFox的example。
请注意,有downsides来执行压缩。
答案 10 :(得分:2)
这仅适用于IDE,但Chris Hesick撰写了一篇关于increasing startup performance under the debugger的博文。