ループが約 15k 回実行されると、CPU の使用量が多すぎます。常に 90 ~ 100 % の範囲にあります。ループ内で行っているのは、一連のコア データ エンティティの更新/作成です。なぜそれが起こるのですか?プロセスをバックグラウンドで実行しており、スレッドの優先度も最小値に指定しています。
質問する
296 次
1 に答える
2
Paul Rは正しいです-システムは、持っているリソースを考慮して、ループ内のタスクを可能な限り迅速に実行します。この場合、管理対象オブジェクトコンテキストでCore Dataオブジェクトを操作しており、ディスクにコミットしていないため、実行速度の唯一の制限はCPU時間です。
これはUIスレッドの問題を引き起こしていますか?理論的には、UIスレッドがCPU時間を必要とする場合は、それを使用する必要があります。sleep()はそれを修正しますが、バックグラウンドタスクの完了に時間がかかるため、理想的ではありません。
もしそうなら、15kのアイテムループよりも簡単にチャンク化できるように作業を分割する方法はありますか?
ループ内の何かがmutex/@synchroniseを使用して実行されていますか?これにより、要求されたときにCPU時間が減少するまでに遅延が発生する可能性があり、UIの遅延につながる可能性があります。
于 2012-08-06T13:47:35.557 に答える