2016-12-12 2 views
0

복잡한 알림 계산이 포함 된 Swift 프로젝트를 진행하고 있습니다. 알림을 예약 할시기를 결정하기 위해 매우 복잡한 작업을 수행해야하는 개체 배열을 반복합니다. 현재 내가 뭐하는 거지 :스위프트는 복잡한 작업을 많이 처리합니다.

for item in items { 
    //some logic here 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) { 
     //complex operation here, then schedule notification 
    } 
} 

을 불행하게도 이것이 내가 모두 같은 큐를 사용하려는 객체의 무리를 위해이 일을하고 있기 때문에 속도가 느린 것으로 증명된다. 경우에 따라 사용자가 앱을 종료하기 전에 알림 일정을 완료하지 않는 경우도 있습니다. 성과를 향상시키는 나의 선택은 무엇입니까? 나는 대신 모든 것이 글로벌 대기열 우선 순위 큐를 사용하도록 생각하고있었습니다. 매번 새로운 큐를 만들 수 있었고, 그래서 그들은 서로를 기다리지 않고 있습니다.

+1

병목 현상이 실제로 무엇인지 알아보기 위해 앱을 프로파일 링 해 보셨습니까? – Undo

+0

예 신고 화재 날짜 계산은 매우 집중적인데 ... 불행히도 우리가 통제 할 수없는 타사 솔루션을 사용하고 있습니다. – Stephen

+0

계산을 수행하는 과정에서 로직을 보지 않고도 그다지 말할 수는 없지만 사용자가 앱을 사용할 때 특정 계산을 먼저 수행해보고 알림 일정을 잡을 때 수행 할 작업이 적어 지도록 할 수 있습니다. 두 줄의 주석 대신 코드에 논리를 표시하면 도움이 될 것입니다. –

답변

1
  1. 첫째, 계산을 위해 "주 스레드"를 사용할 필요가 없다고 생각합니다. 주 스레드는 주로 UI 업데이트 용입니다. 이러한 무거운 작업과 일정 알림을 처리하려면 백그라운드 스레드를 사용해야합니다. 그렇지 않으면 응용 프로그램이 매우 느려지고 반응이 없습니다 (메인 스레드가 해당 작업에 의해 점유됨에 따라)
  2. 둘째, for 루프를 사용하여 여러 개의 기본 스레드 작업을 실행하는 대신. 이런 방식으로 코드를 작성해야합니다.

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) { 
        for item in items { 
         //some logic here 
         //complex operation here, then schedule notification 
        } 
    
    } 
    

    복잡한 조작 코드를 제공하지 않으므로 해당 부분에 대한 조언을 제공 할 수 없습니다. 후속 질문을 자유롭게 추가하십시오. : D

관련 문제