SourceKitService 메모리 과다 사용 해결
그러나 내가 오늘 코드를 썼을 때 이 서비스는 갑자기 매우 높은 CPU와 메모리를 차지했고 한때는 201%와 5.7GB의 점유율에 이르렀으며 직접적으로 컴파일할 수 없고 코드 알림이 없는 문제를 초래했다.
몇 가지 자료를 검색한 후에 인터넷상에서 두 가지 구체적인 방안을 제시했는데 이 문제에 근거하여https://stackoverflow.com/questions/26151954/sourcekitservice-consumes-cpu-and-grinds-xcode-to-a-halt
대답은 우선 이 서비스에서 발생하는 캐시를 삭제한 다음 수동으로 이 서비스를 종료하고 X코드가 다시 켜지기를 기다리면 해결될 수 있다고 지적했다.두 번째 방법은 이 서비스의 타고난 결함 때문에 복잡한 글씨체 유형 추측을 할 때 대량의 자원을 차지할 수 있다. 구체적으로 말하면 매우 긴 수조를 쓸 때 다음과 같이 쓰지 말아야 한다.
let array = ["": [""], "": [""], "": [""], "": [""], "": [""], "": [""] ... ]
대신 Xcode의 추정을 지원하는 명확한 유형을 제공합니다.
let array: [String: [String]] = ["": [""], "": [""], "": [""], "": [""], "": [""], "": [""] ... ]
이치는 이렇다. 그러나 내가 내 코드를 검사한 후에 유사한 쓰기 수조가 없고 심지어 긴 수조도 없다는 것을 발견했다. 모든 수조에 수동으로 유형을 붙여도 소용없다.
그 후에 수조뿐만 아니라 일반적인 변수가 빈번하게'직렬 추정'을 하는 것도 이 문제를 초래할 수 있다는 것을 발견했다. 구체적인 예는 다음과 같다.
let userToken = (dataModel?.id ?? "") + (dataModel?.token ?? "") + (dataModel?.timestamp ?? "") + ...
이런 쓰기 역시 자동 유형 추정의 부담을 증가시키고 간혹 코드가 컴파일 단계를 통과하지 못하게 할 수도 있다.그래서 나는 이런 문법으로 바꾸었다.
let userID = dataModel?.id ?? ""
let token = dataModel?.token ?? ""
let timestamp = dataModel?.timestamp ?? ""
...
let userToken = userID + token + timestamp + ...
변동을 거친 후, 모든 것이 정상으로 돌아왔다.
분명히 게으름을 피우고 싶었는데, 그렇게 많은 속성을 쓰고 싶지 않았는데, 결과적으로 오히려 눈사태식의 번거로움을 초래했다. Xcode는 순식간에 전 세계 최대의 TXT 편집기가 되었다. 앞으로 규범 문제에 더욱 주의해야 할 것 같다~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.