我公司已经使用Delphi开发大型项目十多年了。这些年我们的代码库不断增长,现在已达到约400万行代码。编译速度成为一个问题。我们花费了很多时间清除单元循环引用(缓慢编译的已知原因),并检查了设置的每个方面。但是我们发现,我们无法通过我们能控制的任何方式在实质上进一步改善。
目前,在一个拥有4核心、运行Windows XP SP3和Delphi 2006的最新PC上,如果我们从头开始启动Delphi并进行完整的构建,则需要大约40秒钟。然后,如果我们立即在同一个Delphi会话中再次进行完整的构建,它将需要1分40秒。再进行完整构建,情况会变得更糟。如此反复。
(我们非常清楚Windows本身会缓存文件,并且这对编译速度有很大影响。以上数据是基于文件已被缓存的情况。我们通过让Delphi编译一次项目,终止它,然后启动新的Delphi会话来设置这种情况。因此,虽然40秒看起来并不慢,但只是因为Windows缓存了文件。我们这样做是为了进行苹果对苹果的比较。)
令我们困惑的是为什么编译速度会变慢。(我们曾经观察到,如果项目存在很多单元循环引用,则减速会更加严重。)如果我们终止Delphi并启动新会话,则编译时间将恢复到40秒。更有趣的是,我们发现只要通过单击“取消”按钮来中止编译,然后立即进行完整构建,编译时间也会恢复到40秒。
对我们来说,Delphi自己缓存单元依赖关系的效率似乎不如从头开始构建,并且随着时间的推移而变得越来越糟糕。同时,似乎“取消”按钮可以清除这个缓存。我们考虑的是,如果我们能够利用Delphi IDE子系统进行清除,我们就可以始终保持编译速度处于最佳状态。但是我们不知道该怎么做。
有人知道我们该怎么办吗?
我们仍在使用Delphi 2006,因为我们还没有找到将大型项目迁移到Unicode的可行方法。我在论坛上看到最新的Delphi XE存在与单元循环引用相关的编译速度问题。有人知道Delphi XE是否解决了这个问题吗?
p.s. 我们也知道将项目拆分为运行时包可以减少编译时间。但由于部署和管理原因,我们尽量避免使用运行时包。