3

私のアプリケーションは、バックエンドとして sqlite を使用してメモリ内データベース (:memory:) を作成します。

マスター スレッドでメモリ内データベースへの接続を作成し、この接続を複数のスレッドで共有したいと考えています。これは可能ですか?SQLite 3.7.8 は現在ダウンロード可能です。

共有キャッシュは可能な方法ですか?

4

1 に答える 1

3

シリアル化モードを使用してメモリ内データベースへの接続を開くと、接続が複数のスレッド間で共有される場合があります。

これが機能するには、SQLite がスレッドセーフにコンパイルされている必要があります。これがデフォルトです。

アプリケーションによっては、ディスク上のデータベースに大きな共有キャッシュを使用したり、リーダー スレッドが多数ある場合は WAL モードを使用したりすると、パフォーマンスが向上する場合があります。

例:

sqlite3 *pDb

if (sqlite3_open_v2(":memory:", &pDb, SQLITE_OPEN_FULLMUTEX, NULL) == SQLITE_OK) {

    start_thread1_with_db_handle(pDb);

    start_thread2_with_db_handle(pDb);

    // etc.
}
于 2011-10-30T16:00:19.510 に答える