解決 SourceKitService 內(nèi)存占用過高

SourceKitService 是用來服務(wù)于解析 Swift 代碼格式的鹦肿,和 Swift 的代碼著色、類型自動(dòng)推斷等特性息息相關(guān)揽祥,如果我們?cè)诨顒?dòng)監(jiān)視器中強(qiáng)制停止掉這個(gè)服務(wù)哪亿,那么會(huì)發(fā)現(xiàn) Xcode 中 Swift 代碼大部分都會(huì)變成白色,并代碼提示和類型推斷都失效了菱魔。

但是在我今天寫代碼的時(shí)候發(fā)現(xiàn)留荔,這個(gè)服務(wù)突然占用了很高的 CPU 以及內(nèi)存,曾一度達(dá)到 201% 和 5.7GB 的占用率澜倦,直接導(dǎo)致了無法編譯聚蝶、沒有代碼提示等問題。

搜索了一些資料后肥隆,網(wǎng)絡(luò)上給出了兩個(gè)具體的方案既荚,根據(jù)這篇問題:https://stackoverflow.com/questions/26151954/sourcekitservice-consumes-cpu-and-grinds-xcode-to-a-halt

回答中指出了,首先可以嘗試刪除這個(gè)服務(wù)產(chǎn)生的緩存栋艳,然后手動(dòng)終止掉這個(gè)服務(wù)恰聘,等待 Xcode 重新開啟,可能會(huì)解決吸占。
第二個(gè)辦法就是晴叨,因?yàn)檫@個(gè)服務(wù)的天生缺陷,在進(jìn)行復(fù)雜的字面量類型推斷時(shí)矾屯,可能會(huì)造成占用大量資源兼蕊,具體一點(diǎn)講就是在寫一個(gè)很長(zhǎng)的數(shù)組時(shí),不要寫成以下這樣:

let array = ["": [""], "": [""], "": [""], "": [""], "": [""], "": [""] ... ]

而是要給一個(gè)明確的類型件蚕,幫助 Xcode 進(jìn)行推斷:

let array: [String: [String]] = ["": [""], "": [""], "": [""], "": [""], "": [""], "": [""] ... ]

道理是這么個(gè)道理孙技,但是我檢查了我的代碼之后,發(fā)現(xiàn)并沒有類似的寫法的數(shù)組排作,甚至連長(zhǎng)數(shù)組都沒有牵啦,就算給所有數(shù)組都手動(dòng)加上類型,也無濟(jì)于事妄痪。

后來發(fā)現(xiàn)哈雏,不光是數(shù)組,普通的變量頻繁的進(jìn)行“串聯(lián)推斷”也會(huì)導(dǎo)致這個(gè)問題,具體例子如下:

let userToken = (dataModel?.id ?? "") + (dataModel?.token ?? "") + (dataModel?.timestamp ?? "") + ...

這種寫法同樣會(huì)增加自動(dòng)類型推斷的負(fù)擔(dān)裳瘪,偶爾甚至?xí)斐纱a不能通過編譯階段土浸。
所以,我改成了這種寫法:

let userID = dataModel?.id ?? ""
let token = dataModel?.token ?? ""
let timestamp = dataModel?.timestamp ?? ""
...
let userToken = userID + token + timestamp + ...

經(jīng)過改動(dòng)之后彭羹,一切回歸正常黄伊。

明明是想偷個(gè)懶,不想多寫那么多屬性皆怕,結(jié)果反而造成了雪崩式的麻煩毅舆,Xcode 瞬間變成了全球最大的 TXT 編輯器,看來以后還是要多注意一下規(guī)范問題啊~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末愈腾,一起剝皮案震驚了整個(gè)濱河市憋活,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌虱黄,老刑警劉巖悦即,帶你破解...
    沈念sama閱讀 221,406評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異橱乱,居然都是意外死亡辜梳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門泳叠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來作瞄,“玉大人,你說我怎么就攤上這事危纫∽诨樱” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵种蝶,是天一觀的道長(zhǎng)契耿。 經(jīng)常有香客問我,道長(zhǎng)螃征,這世上最難降的妖魔是什么搪桂? 我笑而不...
    開封第一講書人閱讀 59,537評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮盯滚,結(jié)果婚禮上踢械,老公的妹妹穿的比我還像新娘。我一直安慰自己魄藕,他們只是感情好内列,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泼疑,像睡著了一般德绿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上退渗,一...
    開封第一講書人閱讀 52,184評(píng)論 1 308
  • 那天移稳,我揣著相機(jī)與錄音,去河邊找鬼会油。 笑死个粱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的翻翩。 我是一名探鬼主播都许,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼嫂冻!你這毒婦竟也來了胶征?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,668評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤桨仿,失蹤者是張志新(化名)和其女友劉穎睛低,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體服傍,經(jīng)...
    沈念sama閱讀 46,212評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钱雷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吹零。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片罩抗。...
    茶點(diǎn)故事閱讀 40,438評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖灿椅,靈堂內(nèi)的尸體忽然破棺而出套蒂,到底是詐尸還是另有隱情,我是刑警寧澤阱扬,帶...
    沈念sama閱讀 36,128評(píng)論 5 349
  • 正文 年R本政府宣布泣懊,位于F島的核電站,受9級(jí)特大地震影響麻惶,放射性物質(zhì)發(fā)生泄漏馍刮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評(píng)論 3 333
  • 文/蒙蒙 一窃蹋、第九天 我趴在偏房一處隱蔽的房頂上張望卡啰。 院中可真熱鬧,春花似錦警没、人聲如沸匈辱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽亡脸。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間浅碾,已是汗流浹背大州。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留垂谢,地道東北人厦画。 一個(gè)月前我還...
    沈念sama閱讀 48,827評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像滥朱,于是被迫代替她去往敵國和親根暑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容