我正在处理一个用Delphi 6编写的大型项目,它有相当多的依赖项,编译整个项目需要几分钟时间。在进行一些更改后重新编译可能会更加耗时,因此最快的方法是终止Delphi,删除所有dcu文件并重新编译。
有没有人知道如何确定编译器变得越来越慢的原因?有什么建议可以组织代码以提高编译性能吗?
我已经尝试了以下几件事情:
- 显式包含dpr中的大多数单元,而不是依靠搜索路径:没有改善任何东西。
- 使用命令行编译器dcc32:速度并没有更快。
- 尝试查看编译器的操作(使用SysInternals的ProcessExplorer):显然它大部分时间运行一个名为'KibitzGetOverloads'的函数。但我对这个信息无能为力...
编辑,目前为止的答案总结:
对于我的情况,最有效的答案是:
- CnPack中的“清理未使用的单元引用”功能。它自动清除了1000多个引用,使“冷”编译(在编译之前删除所有dcu文件)大约快了两倍。 "冷"编译=在编译之前删除所有dcu文件。它从编译器获取参考列表。因此,如果有一些{$IFDEF}检查,请确保您的所有配置仍然可以编译。
我想尝试的下一件事:
- 手动重构单元引用(可能使用抽象类),但这需要更多的工作,因为我首先需要确定问题所在。一些可能有用的工具如下:
- GExperts将项目依赖项浏览器添加到Delphi IDE中(但是不幸的是它不能显示每个分支的大小)
在我的情况下没有改变任何事情的内容:
- 将程序和所有组件的所有文件放在一个没有子文件夹的文件夹中。
- 对磁盘进行碎片整理(我尝试了使用 ramdisk)
- 为源代码和输出文件夹使用 ramdisk。
- 关闭实时扫描防病毒软件
- 在 DPR 文件中列出所有单元,而不是依赖搜索路径。
- 使用命令行编译器 dcc32 或 ecc32。
在我的情况下无法应用的内容:
- 避免在网络共享上有依赖项。
- 使用 DelphiSpeedUp,因为我已经使用了它。
- 将所有 DCU 放在一个文件夹中(我总是这样做)
我没有尝试的内容:
- 升级到另一个 Delphi 版本。
- 使用 dcc32speed.exe
- 使用固态硬盘(我没有尝试过,但我尝试了使用 ramdisk 将所有源代码放在其中。但也许我应该在 ramdisk 上安装 delphi)