我很好 Xcode 8.3.2 和 SourceKitService 正在使用我所有的 CPU。我在这里阅读了很多关于 stackoverflow 的问题,但我找不到真正的解决方案。
我尝试了什么:
- 清理项目数据:cmd+shift+alt+K
- 删除派生数据文件夹
- 重启 Xcode
- 从 git 重新下载项目代码
没有任何效果。我知道这个问题可能与某些代码有关,但我怎样才能发现问题出在哪里?我的项目很大...
目前 Xcode 无法使用...
谢谢你的帮助
我很好 Xcode 8.3.2 和 SourceKitService 正在使用我所有的 CPU。我在这里阅读了很多关于 stackoverflow 的问题,但我找不到真正的解决方案。
我尝试了什么:
没有任何效果。我知道这个问题可能与某些代码有关,但我怎样才能发现问题出在哪里?我的项目很大...
目前 Xcode 无法使用...
谢谢你的帮助
这并不是真正的“修复”,因为它也会对依赖向他们展示实时问题的人有害。但是,如果您转到 Preferences->General 并关闭“Show live issues”,那么 xcode 在凉爽的春日就像兔子一样运行。我更喜欢不时强制退出 SourceKit 服务。
SourceKit 一直很耗 CPU 和 RAM,速度慢并且容易崩溃。使用 Xcode 9(根据我的经验)会更好一些。
一个大问题是 Swift 中的许多表达式都有大量的重载。为了使类型推断起作用,所有这些都必须经过测试。这也是为什么 Swift 代码的编译时间通常稍长的原因。
一旦 SourceKit 开始处理此类表达式,其他一切都必须等待。
您可以通过避免长表达式来帮助 SourceKit,尤其是在使用二元运算符和链map
,flatMap
以及filter
对集合和序列的操作时,因为解析此类表达式的返回类型的时间复杂度是指数级的。
您可以尝试通过声明变量的类型(let a: X = expr
而不是let a = expr
)来减少较长的类型推断时间。以我的经验,这也有助于链map
和链(filter
而不是)的闭包。flatMap
{ param -> Result in ...}
{ param in }
您可以使用-Xfrontend -debug-time-function-bodies
Other Swift Flags 构建设置中的标志来获取 Xcode 中构建报告中每个函数的编译时间,这可以帮助您识别编译器和 SourceKit 需要很长时间处理的表达式。详细说明可以在这篇博文中找到。
除此之外,我不知道任何其他解决方案。
我已经使用了很长时间的一个非常好的解决方案是使用Build Time Analyzer for Swift工具来分析我的代码库并显示所有需要大量时间来处理和编译的方法和函数的详细列表。
然后我会重构必要的文件和声明并再次测量我的结果。重复此操作,直到您获得非常好的和快速的编译时间结果。
还有一个不错的列表,其中包含有关 Swift 编译时间的建议。