SourceKitService在Xcode 8.3.2上占用所有CPU

Ste*_*one 7 xcode sourcekitservice

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

我尝试了什么:

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

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

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

谢谢你的帮助

The*_*erg 7

这并不是一个"修复",因为它对那些依赖于向他们展示实时问题的人也是有害的.但是如果你去Preferences-> General并关闭"Show live issues",那么xcode就像一个很酷的春日那样的兔子.我更喜欢不得不强迫不时地退出SourceKit服务.


Pal*_*lle 2

SourceKit 一直占用 CPU 和 RAM,速度缓慢且容易崩溃。(根据我的经验)使用 Xcode 9 会好一点。

一个大问题是 Swift 中的许多表达式都有大量重载。为了使类型推断发挥作用,所有这些都必须经过测试。这也是 Swift 代码的编译时间通常较长的原因。

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

您可以通过避免长表达式来帮助 SourceKit,特别是在集合和序列上使用二元运算符以及map,flatMapfilter操作链时,因为解析此类表达式的返回类型的时间复杂度是指数级的。

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

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

除此之外我不知道还有其他解决方案。