0

質問があります。私のケーススタディでは、2つの大きなSQLiteデータベースがあり、スレッドを使用したいと考えています(つまり、2つのプロセスを同時に使用します)。うまくいきましたか?私は次のコードを書きました:

NSAutoreleasePool *dbPool;

dbPool = [[NSAutoreleasePool alloc] init];

/* All Database work is performed here */

[dbPool release];

案内してください。私はこれを正しく行っていますか?プールを使用して排水または解放する必要がありますか?

そして、そのように、これは並行プロセスを使用していますか?つまり、マルチタスクと同じ動作ですか?

前もって感謝します!

4

2 に答える 2

1

うん、あなたはそれを正しくやっています。新しいスレッドにはそれぞれ、独自の自動解放プールが必要です。

プールの解放/排出に関する質問については、排出メッセージをお勧めします。

sqliteデータベースとはどういう意味ですか?どのようにアクセスしますか?CoreDataを介してアクセスする場合は、メモリ内で次のことを続けてください。

  • スレッドごとに1つのNSManagedObjectContextが必要です。
  • NSManagedObjectsを別のスレッドに渡さず、オブジェクトIDを渡すだけです。
  • オブジェクトIDを別のスレッドに渡す前に、オブジェクトIDを変更/作成したスレッドに保存してから渡します。

もっとルールがありますが、これらは基本的なものです。

マルチタスクとは、一度により多くのアプリケーションを実行できることを意味します。マルチスレッド(=あなたの場合)は、アプリケーションがそのタスクを達成するためにより多くのスレッドを使用することを意味します。

于 2011-03-27T18:18:34.727 に答える
0

ユーザーインターフェイスやその他の重いオブジェクト管理作業の一般的なアプローチは、コードを実行しているように囲むことですが、次を使用する必要がありますdrain

NSAutoreleasePool *dbPool = [[NSAutoreleasePool alloc] init];

// do your work

[dbPool drain];

詳細についてNSAutoreleasePoolこちらをご覧ください。以前のStackOverflowの回答はこちらをご覧ください。基本的に、プール内で行っている作業は、に設定されている場合autorelease、プールが空になると解放されます。これにより、自動解放されたインスタンスを生成する特定のクラスを操作するときにパフォーマンスが向上する可能性があります。ただし、完全かつ即時の制御が必要releaseな場合は、作業中の各オブジェクトが不要になったら、プールを完全に破棄できます。

マルチスレッドの質問については、あなたが何を求めているのか理解できるかどうかはわかりませんが、それでも、プールを使用することは、バックグラウンドスレッドでも確実なアプローチです。これは、スレッドで作業しているオブジェクトが別のオブジェクトでも使用されていないことを前提としています(誤ってリリースされた可能性があるため)。

于 2011-03-27T18:19:19.007 に答える