IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

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

    R0uter发表于 2016-11-19 12:52:43
    love 0

    去落格博客阅读完整排版的SourceKitService 占用大量内存和 CPU 的解决办法

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

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

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

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

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

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

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

    private lazy var emojiFace = ["😀", "😬", "😁", "😂"]

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

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

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

    private lazy var emojiFace:[String] = ["😀", "😬", "😁", "😂"]

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

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

    SourceKitService 占用大量内存和 CPU 的解决办法,首发于落格博客。

    其他推荐:
    1. Swift 里的 单件模式
    2. 自定义:override!
    3. Windows 8.1 “语言包无法使用”的解决办法
    4. Swift 使用 InputMethodKit 写输入法
    5. Swift 开发者的 SDK



沪ICP备19023445号-2号
友情链接