私のsqliteデータベースに大量のデータを挿入しています。現在、ユーザーにとってイライラするプロセスを完了するのに長い時間がかかります. ここの誰かが、このプロセスを高速化する方法や代替手段について何か考えを教えてくれませんか?
助けてください..
私のsqliteデータベースに大量のデータを挿入しています。現在、ユーザーにとってイライラするプロセスを完了するのに長い時間がかかります. ここの誰かが、このプロセスを高速化する方法や代替手段について何か考えを教えてくれませんか?
助けてください..
画像などを保存している場合は、データベースに保存しないことを検討してください。これは非常に非効率的です。そのようなバイナリ データを Documents フォルダーに保存します。データベースで追跡する必要がある場合は、画像ではなくファイル名をデータベースに保存してください。
可能であれば、Grand Central Dispatchやなどを介してこれらの操作をバックグラウンドで実行してくださいNSOperationQueue
。これらのテクノロジについては、同時実行プログラミング ガイドでも説明されています。優れたFMDB (まだ調査していない場合は調査することを強くお勧めします) などの SQLite ラッパーを使用してこれを行う場合は、(GCD を使用する) そのFMDatabaseQueue
(GCD を使用する) を使用して、バックグラウンド データベース操作とフォアグラウンド データベース クエリを調整できます。キューを使用しているため、フォアグラウンド データベース操作がブロックされているという認識を回避するために、可能であればバックグラウンド データベース操作を小さなタスクに分割する必要があります。
NSOperationQueue
操作を実行するために使用されるスレッドを提供します。
オブジェクトを作成NSInvocationOperation
し、 の配列に追加しますNSOperationQueue
。
NSInvocationOperation *insertOperationObject1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(insertMethod1) object:nil];
NSInvocationOperation *insertOperationObject2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(insertMethod2) object:nil];
NSInvocationOperation *insertOperationObject3 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(insertMethod3) object:nil];
//データベースのフェッチ操作を NSOperationQueue に追加する
NSOperationQueue *m_opqInsertQueue = [[[NSOperationQueue alloc] init] autorelease];
[m_opqCustomerProfileDataFetchQueue setMaxConcurrentOperationCount:1];
[m_opqCustomerProfileDataFetchQueue addOperations:[NSArray arrayWithObjects:insertOperationObject1, insertOperationObject2, insertOperationObject3, nil] waitUntilFinished:NO];