2016-12-12 8 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

計算を実行する際のロジックを見ることなく、あまり言い表せませんが、ユーザーがアプリを使用しているときに特定の計算を前もって試してみて、通知をスケジュールするときに実行する作業が少なくて済むようにすることができます。 2行のコメントではなくコードにロジックを表示すると役立ちます。 –

答えて

1
  1. まず、「メインスレッド」を計算に使用する必要はないと主なスレッドは主にUI更新用です。これらの大量の操作やスケジュール通知を処理するには、バックグラウンドスレッドを使用する必要があります。それ以外の場合、アプリケーションは非常に遅く応答しません(メインスレッドがそれらの操作によって占有されているように)
  2. 第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

関連する問題