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