我很好Xcode 8.3.2和SourceKitService正在使用我的所有CPU。我在stackoverflow上阅读了很多问题,但我找不到真正的解决方案。
我尝试了什么:
没有任何效果。我理解这个问题可能与某些代码有关,但我怎样才能发现问题在哪里?我的项目很大......
目前Xcode无法使用......
感谢您的帮助
答案 0 :(得分:5)
这不是一个“修复”,因为它对那些依赖于向他们展示实时问题的人也是有害的。但是如果你去了Preferences-> General并关闭了“显示实时问题”,那么xcode会在一个凉爽的春日像兔子一样运行。我不愿意不时强迫退出SourceKit服务。
答案 1 :(得分:1)
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 }
)的闭包。
您可以使用Other Swift Flags构建设置中的-Xfrontend -debug-time-function-bodies
标志来获取Xcode中构建报告中每个函数的编译时间,这可以帮助您识别编译器和SourceKit需要很长时间处理的表达式。详细说明可在this blog post。
除此之外,我不知道任何其他解决方案。
答案 2 :(得分:1)
我用了很长时间的一个非常好的解决方案是使用Build Time Analyzer for Swift工具来分析我的代码库,并显示需要花费大量时间来处理和编译的所有方法和函数的详细列表。
然后我会重构必要的文件和声明并再次测量我的结果。重复此操作,直到你有非常好的和快速的编译时间结果。
还有一个nice list有关于Swift编译时间的建议。
答案 3 :(得分:0)