SourceKitService在Xcode 8.3.2上占用所有CPU

时间:2017-06-04 09:59:21

标签: xcode sourcekitservice

我很好Xcode 8.3.2和SourceKitService正在使用我的所有CPU。我在stackoverflow上阅读了很多问题,但我找不到真正的解决方案。

我尝试了什么:

  • 清理项目数据:cmd + shift + alt + K
  • 删除derivedData文件夹
  • 重新启动Xcode
  • 从git
  • 重新下载项目代码

没有任何效果。我理解这个问题可能与某些代码有关,但我怎样才能发现问题在哪里?我的项目很大......

目前Xcode无法使用......

感谢您的帮助

4 个答案:

答案 0 :(得分:5)

这不是一个“修复”,因为它对那些依赖于向他们展示实时问题的人也是有害的。但是如果你去了Preferences-> General并关闭了“显示实时问题”,那么xcode会在一个凉爽的春日像兔子一样运行。我不愿意不时强迫退出SourceKit服务。

答案 1 :(得分:1)

SourceKit一直是CPU和RAM饥饿,缓慢且容易崩溃。 (根据我的经验)使用Xcode 9可以获得更好的效果。

一个大问题是Swift中的许多表达式都有大量的重载。对于工作类型推断,所有这些都必须进行测试。这也是为什么Swift代码的编译时间通常要长一点的原因。

一旦SourceKit开始处理这些表达式,其他一切都必须等待。

您可以通过避免长表达式来帮助SourceKit,尤其是在对集合和序列使用二元运算符和mapflatMapfilter操作链时,作为解决返回的时间复杂度这类表达式的类型是指数型的。

您可以尝试通过声明变量类型(let a: X = expr而不是let a = expr)来减少长类型推断时间。根据我的经验,这也有助于关键链mapfilterflatMap链({ param -> Result in ...}而不是{ param in })的闭包。

您可以使用Other Swift Flags构建设置中的-Xfrontend -debug-time-function-bodies标志来获取Xcode中构建报告中每个函数的编译时间,这可以帮助您识别编译器和SourceKit需要很长时间处理的表达式。详细说明可在this blog post

中找到

除此之外,我不知道任何其他解决方案。

答案 2 :(得分:1)

我用了很长时间的一个非常好的解决方案是使用Build Time Analyzer for Swift工具来分析我的代码库,并显示需要花费大量时间来处理和编译的所有方法和函数的详细列表。

enter image description here

然后我会重构必要的文件和声明并再次测量我的结果。重复此操作,直到你有非常好的和快速的编译时间结果。

还有一个nice list有关于Swift编译时间的建议。

答案 3 :(得分:0)

我在一个带有多个故事板的应用程序上看到了类似的问题,有趣的是,Xcode在其中一个故事板上遇到了麻烦。在故事板上工作会非常困难,CPU会全力以赴。

我们的解决方案是将故事板分成更小的故事板。这可以通过选择几个场景然后在菜单上Editor -> Refactor to Storyboard...轻松完成。

enter image description here

这一改变使得使用新的小故事板变得更加容易。