3

FMDB を使用して標準の iOS 内部 SQLite データベースにアクセスし、複数のスレッド間で 1 つの db 接続を共有しています。

スレッド セーフにするために、データベースへのアクセスを一度に 1 つのコード ブロックにロックしています。明らかに、データベースへのアクセスが少しボトルネックになっていますが、すべてうまくいきます。

私の質問は、すべて読み取り専用の SELECT ステートメントである限り、複数のスレッドからの同時クエリを許可することで、これを少し緩和できますか?

どこにも答えが見つかりません。

4

2 に答える 2

3

同じ接続を使用して複数のクエリを同時に実行することはできません。

ただし、純粋な読み取り専用アクセスの場合は、複数の接続を使用できます。

于 2013-01-19T13:36:44.310 に答える
1

FMDatabaseスレッドごとに 1 つのオブジェクトを持つことができます。真のビジー状態をテストして適切に処理するには、コードを作成する必要がある場合があります。たとえばbusyRetryTimeout、状況に応じて適切に設定します (たとえば、競合状況で再試行する時間を指定します)。また、タイムアウトが切れてデータベース クエリが失敗した場合も適切に処理します。

明らかに、共有を使用することFMDatabaseQueueは、複数のスレッドからデータベースの対話を行う最も簡単な方法です。FMDB の「 FMDatabaseQueue とスレッド セーフティの使用」セクションを参照してくださいREADME

于 2013-01-19T15:14:29.867 に答える