我正在尝试从在 iOS 设备上以只读模式使用的 SQLite DB 获得最大性能。到目前为止,我发现这些事情对性能有积极影响:
sqlite3_exec(ret, "BEGIN TRANSACTION", NULL, NULL, NULL); // open transaction after open DB and close transaction before close DB
sqlite3_exec(ret, "PRAGMA journal_mode = OFF", NULL, NULL, NULL);
sqlite3_exec(ret, "PRAGMA cache_size = 20000;", NULL, NULL, NULL);
sqlite3_exec(ret, "PRAGMA locking_mode = EXCLUSIVE", NULL, NULL, NULL);
与没有上述编译指示的原始版本相比,我的性能提高了 20-25%。
还有其他可以帮助提高性能的东西吗?我担心的一件事是,即使它是只读访问,我也有多个线程可以从数据库中读取数据,在多线程场景中使用上面的编译指示是否安全?