SourceKitService 占用大量内存和 CPU 的解决办法

在使用 Xcode 进行 Swift 语言开发软件的时候,不少人在项目中后期都会遇到这么一个问题,如题图那样:SourceKitService 占用大量的 CPU 和内存,甚至直接导致系统卡死。

遇到 SourceKitService 大量占用 CPU 和内存的人不在少数
遇到 SourceKitService 大量占用 CPU 和内存的人不在少数

那么,这到底是怎么一回事呢? 在 StuckOverflow 上的高票答案是这么说的:

在活动监视器里找到 SourceKitService 双击它,看它打开了哪些目录,去把缓存删除然后强制结束进程。

这样的确有助于缓解症状,但治标不治本,甚至不出几秒就又一次占用 CPU 200% 了。所以,我们需要更根本的解决办法。

其实如果你强制结束 SourceKitService ,你就会发现 Xcode 里的代码高亮都消失了——代码变成了类似纯文本文档那样的黑白色! SourceKitService 掌管了你代码的高亮,其实它还掌管了 Swift 的类型推断工作。

也就是说,比如你的代码是这样写的:

而你又图省事反正基本不会变的内容,所以就直接写了很长的数组把所有的表情都作为字符串给放进去了,那么这个数组的字面量就会变得很长很长。

这时候 SourceKitService 就需要花费大量的时间来处理这些内容,对你数组的类型进行推断——可能是由于某些内部 Bug,又或者说是 SourceKitService 天生的不完善,总之它就会卡在这里,形成题图中的尴尬情况。

这时候,我们需要这样处理:

也就是说,给这个数组显式地写明类型,这样,SourceKitService 就不会再来处理它的类型了——因为是明确的。

同时,SourceKitService 的 CPU 占用立即就降下去了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注