我在一个相对较大的项目(几万行代码)上使用Xcode 4.2,它的运行速度非常慢。编辑是可以的,但是每当我尝试编译项目(在Xcode中或在命令行上使用xcodebuild进行编译)时,我的机器(四核i7 MacBook Pro,4 GB RAM)都会停止运行。我已经注意到,直接启动xcodebuild之后,它会产生8个以上的clang进程,而不会启动“真正的”编译进程。到目前为止,在stout上还没有看到xcodebuild输出。我已经尝试过reducing the number of parallel build processes,但是开始时仍然启动了许多clang进程。该项目使用6或7个直接相关的外部项目,并且可能具有120个源文件。在Xcode 3.2下,该项目曾经非常快速地被编译。发生了什么?以及如何使Xcode再次快速?

最佳答案

我们大多数人都有三个主要选择:

  • 恢复到Xcode 3进行日常开发。
  • 扔更多的硬件。
  • 更改项目的结构并应用大规模开发技巧(即使20-30 KSLOC并不大)。

  • 最简单的解决方案是还原为Xc3。是的,Xc4比Xc3需要更多的东西。内存,CPU,磁盘空间和I/O。您将必须确定最大的问题在哪里,以减少对您的影响。

    我最近购买了具有两倍物理内核和两倍物理内存的新MBP,同时升级到Lion和Xc4。编译时间的确缩短了,但是其余大部分实际上都比较慢,并且更多地占用了资源。这根本不是IDE所期望的,IDE也不允许多个打开的项目,并且使用统一的工作区 View 。

    在以下所有类别中,向Lion + Xc4的迁移使我的硬件需求增加了一倍以上:

    内存

    对于使用Xc4和Lion的大多数非重要项目而言,4GB现在太少了。您仍然可以减少这一点。我的主要2台计算机上分别有8GB和10GB,Xc4会很容易地消耗掉它们(但是我的项目比您的项目要复杂得多,除非您编写冗长的行)。无论如何,您可以通过以下方法减少此问题:
  • 购买更多内存。
  • 如果要在Xcode中构建大型项目,请禁用索引。这样可以将Xcode的内存消耗减少一半。
  • 以32位运行Xcode。这并不是每个人都可以选择的选项,因为在较大的项目中它将超过4 GB。
  • 再次减少构建过程的数量。
  • 经常重新启动Xcode(在清除自身之后做得不好)。
  • 使用clang作为编译器。通常,Clang实例使用的内存少于Apple的GCC 4.2。
  • 卸载不经常更改的依赖目标。示例:在大多数情况下,您不需要每天重建第三方库。

  • CPU

    Xcode 4使用新的(更准确的)完成解析器。
  • 放下您的包含依赖关系图和依赖关系。使用Obj-C相当容易,因为每个Obj-C实例都是一个指针。示例:从标题中删除松散依赖的框架包含。
  • 正确分离依赖项和模块。开发库,但是尝试使它们很小,并注意它们将添加的依赖项。示例:我领导的一个项目中,开发人员添加了一个小功能(不到应用程序的1%),但是由于它需要的依赖项数量(例如Three20,然后是更多),最终可执行文件的二进制大小增加了一倍(并且构建时间增加了,解析器还有很多工作要做)。该功能不需要大多数功能-因为它们是objc符号,因此无法将其剥离。
  • 如果可能,减少翻译次数。
  • 优化使用前缀 header 的方式。您可以共享它们,也可以在没有充分理由的情况下创建它们。这比IDE更有益于编译器。
  • 最小化内存使用量。在大型项目中,GC工作(包括所有NSObject分配)消耗了超过1/3的CPU使用率,但是当堆很大时,它仍然花费大量时间进行收集。
  • 使用外部文本编辑器和VC客户端。很明显,因为Xc4在大型项目中经常显示SBBOD。
  • 最小化语言复杂度。按照复杂程度的顺序:C,ObjC,C++,ObjC++。翻译越复杂,解析和编译源代码所花费的时间就越长,尤其是当您的依赖程度很高时。如果您可以轻松地在依赖项中设置语言障碍,请这样做。
  • 您可以disable code sense indexing via defaults (也可以减少内存需求)。

  • 硬盘

    这可以是速度/大小的平衡。
  • 购买速度更快的产品(例如SSD)。
  • 清理并最小化 header 依赖性。
  • 使用RAM磁盘,例如Make RAM Disk
  • 购买更多内存。随着Xc4消耗的数量,它最终在大型项目中经常换出到磁盘。
  • 优化您的构建以适本地使用pch文件。这并非总是显而易见的方向:在大型项目中已经有好几年没有使用它们了。
  • 清除Xcode和Instruments留下的临时文件they can be huge。在某些情况下,您可以将它们保存在自定义位置。如果它们确实消耗了数十GB,并且您的构建目录与引导目录相同,则可以通过定期清理磁盘来减少磁盘的工作量。

  • 构建
  • 在Xc4中,与Xcode并行的xcodebuild现在使工作加倍(默认情况下,单独的构建目录)。在Xc3中,默认值是构建到相同的目标。验证您的设置-如果您允许的话,Xcode会做大量的冗余构建(例如,每个工作区/配置一个目标,而不是Xc3的平面构建模型)。
  • 或仅用四核MacMini填充抽屉,然后将其用作专用或分布式构建器。

  • 文件错误

    (自我说明)

    关于xcode - 为什么xcodebuild和Xcode 4.2这么慢?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7780663/

    10-11 19:28
    查看更多