经过一番研究,我发现SQLite有两种缓存:"私有页面缓存"和#34;共享缓存"。我尝试使用它们并测试性能,但我真的很混淆它们的用法。以下是我的问题:
我的方法是禁用/启用私有缓存/启用共享缓存,如下所示,这些是对的吗?
禁用(默认情况下打开?):
ret = sqlite3_open_v2(db_name,db_handle,SQLITE_OPEN_READONLY,NULL);
启用私有缓存:
ret = sqlite3_open_v2(db_name,db_handle, SQLITE_OPEN_READONLY | SQLITE_OPEN_PRIVATECACHE,NULL);
启用共享缓存:
ret = sqlite3_open_v2(db_name,db_handle, SQLITE_OPEN_READONLY | SQLITE_OPEN_SHAREDCACHE,NULL);
我现在通过查看 SQLITE_STATUS_PAGECACHE_USED 和 SQLITE_DBSTATUS_CACHE_USED 来检查sqlite。
这真的让我感到困惑。即使我没有启用缓存,SQLITE_DBSTATUS_CACHE_USED也始终有值。对于SQLITE_STATUS_PAGECACHE_USED,无论我启用还是禁用缓存,只有在我初始化sqlite之前添加以下代码时才会出现0:
sqlite3_config(SQLITE_CONFIG_PAGECACHE, buf, sz, N);
看起来sqlite_open_v2标志无法正常工作?
答案 0 :(得分:0)
SQLite有一种缓存,即页面缓存,并且始终启用。
在共享缓存模式下,同一进程中的多个连接可以共享页面缓存。因此,只要您使用单个连接,就不会发现任何差异。
(共享缓存模式适用于在内存受限的设备中运行的多线程服务器;它可能对您没用。)