SourceKitService 佔用大量內存和 CPU 的解決辦法

在使用 Xcode 進行 Swift 語言開發軟件的時候,不少人在項目中後期都會遇到這麼一個問題,如題圖那樣:SourceKitService 佔用大量的 CPU 和內存,甚至直接導致系統卡死。

遇到 SourceKitService 大量佔用 CPU 和內存的人不在少數
遇到 SourceKitService 大量佔用 CPU 和內存的人不在少數

那麼,這到底是怎麼一回事呢?在 StuckOverflow 上的高票答案是這麼說的:

在活動監視器裡找到 SourceKitService 雙擊它,看它打開了哪些目錄,去把緩存刪除然後強制結束進程。

這樣的確有助於緩解症狀,但治標不治本,甚至不出幾秒就又一次佔用 CPU 200% 了。所以,我們需要更根本的解決辦法。

其實如果你強制結束 SourceKitService ,你就會發現 Xcode 裡的代碼高亮都消失了——代碼變成了類似純文本文檔那樣的黑白色! SourceKitService 掌管了你代碼的高亮,其實它還掌管了 Swift 的類型推斷工作。

也就是說,比如你的代碼是這樣寫的:

而你又圖省事反正基本不會變的內容,所以就直接寫了很長的數組把所有的表情都作為字符串給放進去了,那麼這個數組的字面量就會變得很長很長。

這時候 SourceKitService 就需要花費大量的時間來處理這些內容,對你數組的類型進行推斷——可能是由於某些內部 Bug,又或者說是 SourceKitService 天生的不完善,總之它就會卡在這裡,形成題圖中的尷尬情況。

這時候,我們需要這樣處理:

也就是說,給這個數組顯式地寫明類型,這樣,SourceKitService 就不會再來處理它的類型了——因為是明確的。

同時,SourceKitService 的 CPU 佔用立即就降下去了。

anyShare分享到:

發表評論

您的電子郵件地址不會被公開. 必填字段標 *