アプリケーションでは、Realmに定期的に100〜10,000個のオブジェクトを書き込む必要があります。明らかにこれは大きな書き込みですので、私はバックグラウンドでこの書き込みを実行しようとしています。そのためユーザーは他の操作を実行でき、書き込みに気付かないことさえあります。残念ながら、私の書き込みはバックグラウンドスレッドで実行されているとは思っていましたが、メインUIはまだブロックされています。私がレルムに書き込むために呼び出すメソッドのジストです。このメソッドは、ループしている配列から単一のオブジェクトに対して繰り返し呼び出されます。私は何か大騒ぎしているように見えますか?どんな助けでも大歓迎です。バックグラウンドスレッドで実行されたレルム書き込みはまだブロックされていますメインUI
func writeCustomerToRealm(inputCustomer:Customer) {
let qualityOfServiceClass = QOS_CLASS_BACKGROUND
let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
dispatch_async(backgroundQueue, {
let realm = try! Realm()
realm.beginWrite()
realm.add(self.swapCustomerForRealmCustomer(inputCustomer))
try! realm.commitWrite()
})
}
メインスレッドがブロックしているときに実行していることを共有できますか?それがブロックされている間のスタックトレースは特に興味深いでしょう。 – bdash
System TraceまたはTime Profilerのスタックトレースと同様にInstruments @bdash? – Amloelxer
はい、タイムプロファイラは、メインスレッドが何をしているのかを表示する必要があります。メインスレッドがブロックされているときにデバッガを中断してメインスレッドのスタックトレースを調べるだけでも、メインスレッドがブロックされていることを確認するのに十分です。 – bdash