相关疑难解决方法(0)

Delphi:如何组织源代码以提高编译器性能?

我正在开发一个具有相当多依赖性的大型delphi 6项目.编译整个项目需要几分钟的时间.经过一些更改后重新编译有时会更长,以便更快地终止Delphi,擦除所有dcu文件并重新编译所有内容.

有没有人知道识别的方法,是什么让编译器变慢和变慢?有关如何组织代码以提高编译器性能的任何提示?

我已经尝试过以下事项:

  • 显式地包含dpr中的大多数单元而不是依赖于搜索路径:它没有改进任何东西.
  • 使用命令行编译器dcc32:它不是更快.
  • 试着看看编译器做了什么(使用来自SysInternals的ProcessExplorer):显然它大部分时间运行一个名为'KibitzGetOverloads'的函数.但我对这些信息无能为力......

编辑,答案总结到现在为止:

在我的案例中最有效的答案:

  • cnpack中的 "清理未使用的单元引用" 功能.它几乎自动清理了超过1000个引用,使"冷"编译速度快了两倍.("冷"编译=在编译之前擦除所有dcu文件).它从编译器获取引用列表.因此,如果您有一些{$ IFDEF}检查所有配置是否仍然编译.

接下来我想尝试一下:

  • 手动重构单元引用(最终使用抽象类),但它需要更多工作,因为我首先需要确定问题所在.一些可能有用的工具:
    • GExperts向delphi IDE添加了一个项目依赖项浏览器(但不幸的是它无法显示每个分支的大小)
    • Delphi Unit Dependency Viewer V1.0做同样的事情,但没有Delphi.它可以计算一些简单的统计数据(哪些单位被引用最多,......)
    • 在其中一个答案的链接上引用的Icarus.

在我的案例中没有改变任何事情的事情:

  • 将我的程序和所有组件中的每个文件放在一个没有子文件夹的文件夹中.
  • 对磁盘进行碎片整理(我尝试使用ramdisk)
  • 使用ramdisk作为代码源和输出文件夹.
  • 关闭实时扫描防病毒软件
  • 列出dpr文件中的所有单元,而不是依赖于搜索路径.
  • 使用命令行编译器dcc32或ecc32.

不适用于我案件的事情:

  • 避免依赖网络共享.
  • 使用DelphiSpeedUp,因为我已经拥有它.
  • 为所有dcu使用单个文件夹(我总是这样做)

我没试过的事情:

  • 升级到另一个Delphi版本.
  • 使用dcc32speed.exe
  • 使用固态驱动器(我没有尝试过,但我尝试使用ramdisk放置所有源代码.但也许我应该在ramdisk上安装delphi)

delphi compiler-construction optimization

32
推荐指数
4
解决办法
6968
查看次数

Delphi编译时间过慢

好吧,我的工作项目中出现了一个奇怪的问题.它是用Delphi编写的.当我尝试编译它时,需要花费8个小时来编译大约770 000行(并且它不是结束),而我的同事只需要15-20秒.我已经尝试过为什么Delphi的编译速度会随着打开时间的延长而降低,我该怎么办呢?

  1. 缩短项目的路径
  2. 使用MyDefrag对光盘进行碎片整理
  3. 使用清除单元缓存(不确定,如果它可以工作)
    我也关闭了优化,我使用调试模式.我的电脑非常快(i5-2310 3.1 GHz,16 Gb RAM,通常的SATA硬盘),瓶颈可能是硬盘,但我的同事也常用.所以,这是非常神秘的,编译如此缓慢的原因是什么.

编辑:我为缺乏信息而道歉.这是其他信息:

  1. 我使用调试模式,释放一个工作相同.
  2. 我们使用Delphi XE版本.
  3. 我最初用项目复制了我的同事的文件夹.
  4. 我不使用网络驱动器,我试图将项目移动到另一个硬盘驱动器.
  5. 关于系统的其他信息:我使用Windows 7 Enterprise N 64位,而我的同事使用Windows 7 32位,另外,Delphi XE是32位(dunno,如果它可以是64位).可能是某种原因的原因?

编辑2:我找到了解决方案!问题是我在Windows 64位系统上安装了Delphi.在虚拟Windows 7 x86上安装它使它工作:在几秒钟内编译.不知道,为什么性能上存在如此大的差距.

delphi performance compilation

6
推荐指数
1
解决办法
2885
查看次数