繁体   English   中英

如何提高delphi应用程序的启动速度?

[英]How to increase the startup speed of the delphi app?

您如何提高Delphi应用程序的启动速度(或减少启动时间)?

除了特定于应用程序,是否有一个标准的技巧总是有效?

注意:我不是在谈论快速算法等。 在速度方面,只有启动时的性能提升。

在项目选项中,不要预先自动创建所有表单。 根据需要创建并释放它们。

尝试在主窗体的OnCreate事件中尽可能少地做。 而是将一些初始化移动到不同的方法 ,并在向用户显示表单后执行此操作。 应用程序忙于忙碌鼠标光标的指示器很长。

完成的实验表明,如果您使用完全相同的应用程序并只是向其添加启动通知,用户实际上会认为该应用程序启动速度更快!

除此之外,您可以执行常规操作,例如排除调试信息并在编译器中启用优化

最重要的是, 不要自动创建所有表单 根据需要动态创建它们。

好吧,正如Argalatyr建议我将我的评论改为单独的答案:

作为“不要自动创建表单”答案的扩展(这将是非常有效的)我建议延迟打开与数据库,互联网,COM服务器和任何外围设备的连接,直到您首先需要它。

在您的表单显示之前会发生三件事:

  1. 所有单元中的所有“初始化”块都以“第一次看到”的顺序执行。
  2. 创建所有自动创建的表单(从DFM文件加载并调用其OnCreate处理程序)
  3. 显示主窗体(调用OnShow和OnActivate)。

正如其他人所指出的,你应该只自动创建少量的表单(特别是如果它们是具有大量组件的复杂表单),并且不应该在这些表单的OnCreate事件中进行冗长的处理。 如果您的主要形式非常复杂,您应该重新设计它。 一种可能性是将主表单拆分为多个按需加载的帧。

其中一个初始化块也可能需要一些时间来执行。 要验证,请在程序的第一行放置断点(.dpr文件中的主“begin..end”块)并启动程序。 将执行所有初始化块,然后断点将停止执行。

以类似的方式,您可以在主程序上执行步骤(F8) - 您将看到创建每个自动创建的表单需要多长时间。

显示启动画面,这样人们就不会注意到启动时间长:)。

最快的代码 - 它是代码,永远不会运行。 很明显,真的;)

应用程序的部署可以(通常会!)以开发人员可能没有考虑过的方式进行。 根据我的经验,这会产生比任何人想要的更多性能问题。

常见的瓶颈是文件访问 - 启动应用程序所需的配置文件,ini文件可以在开发人员计算机上很好地执行,但在不同的部署情况下执行得非常糟糕。 同样,应用程序日志记录会阻碍性能 - 无论是出于文件访问原因还是日志文件增长。

我经常看到的是在Citrix环境或共享网络驱动器上部署的富客户端应用程序,基础架构团队决定将用户临时文件或个人文件存储在应用程序发现问题的位置,并且这导致性能或稳定性问题。

我经常看到影响应用程序性能的另一个问题是用于将数据导入和导出到文件的方法。 通常在Delphi业务应用程序中,我看到可以使用DataSet的导出函数 - 迭代和写入文件。 考虑用于写入文件的方法,考虑可用的内存,考虑写入/读取的“文件夹”可以是机器本地的,也可以是远程服务器上的。

开发人员可能会认为这些是安装问题,超出了他们关注的范围。 在将此类问题确定为“基础架构问题”之前,我通常会看到许多开发人员分析周期。

  • 首先要做的是清除自动创建的表单列表(查找项目选项)。 在需要时动态创建表单,尤其是在应用程序使用数据库连接(数据模块)或包含大量控件的表单时。
  • 考虑使用表单继承也减少exe大小(资源使用被模仿)
  • 减少表单数量并将类似或相关的功能合并为单个表单

放置必须在线程启动时执行的长时间运行的任务(打开数据库连接,连接到应用服务器等)。 在线程完成之前,将禁用依赖于这些任务的任何功能。

不过,这有点像作弊。 主要形式立即出现,但你只是给出了更快的启动时间。

使用ASPackUPX等压缩您的可执行文件和任何dll。 减速时间可以通过更快的加载时间来弥补。

UPX用作如何加快FireFox加载的示例

请注意,exe压缩存在缺点

这仅适用于IDE,但Chris Hesick发布了一篇关于在调试器下提高启动性能的博客文章。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM