我正在开发一个具有相当多依赖性的大型delphi 6项目。编译整个项目需要几分钟的时间。经过一些更改后重新编译有时会更长,以便更快地终止Delphi,擦除所有dcu文件并重新编译所有内容。
有没有人知道识别的方法,是什么让编译器变慢?有关如何组织代码以提高编译器性能的任何提示吗?
我已经尝试过以下事项:
编辑,答案摘要至今:
在我的案例中效果最好的答案:
接下来我想尝试一下:
在我的案例中没有改变任何事情的事情:
不适用于我案件的事情:
我没试过的事情:
答案 0 :(得分:11)
可能会降低编译器速度的一些事情
uses
子句中的冗余单元。有关CnPack
。的链接,请参见this question
include TDD32 info
。尝试删除uses子句中未使用的单位,看看它是否有所作为。
答案 1 :(得分:9)
使用Delphi 7和2009,上周我通过近2分钟进行编译,另外45秒来点击f9并将我的应用程序的主要形式编译并运行20秒。这件事让我疯狂了大约6个月,我尝试的任何东西似乎都没有用。使用来自SysInternals的filemon,我意识到编译器所需的每个单元(主要是组件)都在搜索路径中的每个文件夹中进行搜索,是的,这会产生大量的FileOpen,FileExists和FileNotFound等。我做的是,每个DCU,DFM,RES等来自组件全部在一个文件夹中,并且在搜索路径中只有这个文件夹,以及项目所需的其他几个文件夹;结果太棒了。修复之前的其他问题是调试。每次F7需要almos 40秒,在调试时按F8键,这也已修复。希望这些信息可以帮到你。委内瑞拉Isla de Margarita的问候。请原谅我的英文,如果有任何错误;)
答案 2 :(得分:8)
检查搜索路径中是否存在本地计算机上没有的路径。
即。不要链接到网络共享上的二进制文件,并检查搜索路径是否未检查任何网络共享。
答案 3 :(得分:5)
您可以尝试DelphiSpeedUp,看看它是否有所作为。它不会加速命令行编译,但它声称有一些IDE编译的加速。
答案 4 :(得分:4)
我没有看到编译器随着时间的推移变慢,但是自从我们使用Delphi 6以来已经很长时间了。
答案 5 :(得分:4)
答案 6 :(得分:3)
虽然只与你的确切问题部分相关,但我听说使用固态硬盘大大增加了Delphi的编译时间--Nick Hodges几周前在Delphi Podcast上说过这个问题。 布赖恩
答案 7 :(得分:2)
在你的情况下,划分你的 项目进入包可以改善 编译速度。用这种方式,它 只生成修改后的包, 不是每个单独的大量二进制 重新编译。使用包 也可以帮助轻松部署 您的项目更新。
答案 8 :(得分:2)
我们遇到了相同(或类似)的问题。 我的包的编译时间约为12分钟。 在更改之后,现在我们已经移动到32 sg。
经过多次测试后,我们发现“有问题的情况”如下: 在一个包中:
A单元在同一个包中使用大量单位:U1,U2,U3,U4,... U100(接口的使用)。这是集中所有初始化工作的重要单元。
包裹的所有单位,U1,U2,U3,..,U100使用单位A (使用实施)
这个“循环引用”不会产生编译错误,因为USES不同,但导致编译时间很长。
解: 消除 A单位中对每个单位U1,U2,U3,....,U100的引用。
现在,一个单位使用大量单位:U1,U2,....,U100,但单位U1,U2,...,U100,不使用单位甲
在此更改之后,编译时间大幅缩短。
如果您遇到类似情况,可以尝试一下。
我的英语不好的借口。
问候。
Neftalí-GermánEstévez -
答案 9 :(得分:2)
我有同样的问题,我可以提出(2)影响我的原因。
循环引用。这位绅士说一个是正确的。我会有一些可以快速编译的LARGE项目,以及编译速度慢的SMALL项目。在我重新构造代码之前无法理解它,然后我获得了更快的编译速度。很多小单位。构建单片单元很容易。但是,它有许多处罚。
我已经听过1000次了,在用户可能正在使用的慢速机器上进行开发。嘿,这是测试部门的。我不能浪费时间编译,Delphi加载速度,软件包等。我出去买了一台“GAMERS”电脑(WOW)和固态硬盘(如前所述),12GB RAM,OVERCLOCKED“i7”Intel芯片,三重视频卡(链接),全部在Vista64上(一旦最终运行所有已安装的部件,Vista也不错)。把它全部设置起来真是太痛苦了。但是,我不再在我的电脑上等了。纯粹的编译速度,加载速度,加上一台全新的机器,没有在过去两年中安装在最后一个上的所有垃圾。我甚至卸载了DelphiSpeedUp。不需要它。而且我不需要关闭AntiVirus,因为我也做了那个,并因互联网垃圾而受到惩罚。所以AntiVirus继续使用。纯粹而简单,得到一台BALLS OUT机器。您的时间比在新计算机上花费的时间更多。
答案 10 :(得分:2)
请参阅this。
我使用VCL.NET代码库进行了测试并且工作....不知道它是否仍然适用于D2009,但它在D2006.net上运行
答案 11 :(得分:1)
尝试安装ram磁盘并将dcu输出路径设置为指向那里。这使我在DelphiSpeedUp之上使用Delphi 2007的编译时间减少了一半。
答案 12 :(得分:1)
编译器只会编译已更改的单元。如果您更改了接口部分中的代码,则会编译依赖于已更改单元的所有单元。如果仅更改了实现部分中的代码,则编译将仅包含该单元,但可能链接所有模块。预先设想好的接口设计但如果重构代码以限制对实现的更改,则编译时间可能会减少。我不知道多少钱。在Delphi 7“使用Delphi”中的多个和间接单元引用下的Delphi帮助文件中提到了这一事实。
答案 13 :(得分:1)
由于我没有获得50点声望点,我无法回复我的BALLS OUT帖子。所以我必须在这里开始一个新的订单项。我买了这台机器来处理非常大的Photoshop文件,我还在Inventor和3DStudio MAX中做了很多3D建模。这就是我买新机器的原因。但是......由于它,我肯定会在我的Delphi使用方面获得巨大的推动。我的工资成本超过我在新机器上花费的额外2K,而不是购买一些基本的戴尔(这可能对Delphi来说很好)。所以我可能收到的任何BOOST都是奖金。如果你像我一样每天都在做这项工作,那么你遇到的任何延迟都会成为真正的问题。它使用Photoshop,Autodesk产品和DELPHI为我做了什么。所以我会再说一次,一台新的BALLS OUT机器,将改善你的表现。这家伙问他能做些什么来提高编译性能。所以,我发表了自己的意见。
P.S。将Delphi和您的项目放在固态硬盘上,您将看到大幅提升。
答案 14 :(得分:0)
我从未尝试过,但在中央.dpr中使用完整/相对路径对所有文件进行硬编码也可能有帮助(脚本重新生成/更新?)。 (你在上面提到过,但它是用'\ path \ yyy'表示法中的路径xx吗?)。
其他远射:
P.S。对不起FPC参考。我做了两件事,有时我不知道什么属于什么。
答案 15 :(得分:0)
我所做的总是确保库路径中的目录很少,以及大多数组件和静态代码。我还确保库路径中没有源代码,只有.dcu / .res等。只有browsepath有源代码,特殊情况通过项目的searchpath处理。
在任何情况下限制你编译的内容。