SQLite是否缓存查询结果以优化性能?
我发现了一个在sqlite中出现的情况。当我重复使用游标对象时,任务管理器里的内存使用量不断增加,直到我的程序出现内存溢出错误。
于是我重新整理了代码,每次查询时都打开一个到sqlite文件的连接,查询我需要的数据,然后再关闭这个连接。
这样做似乎对内存的需求没有那么大,内存使用量不会超过某个点。
我在sqlite数据库中做的操作很简单,就是对一个表进行选择(包含两个聚合操作)。
这种情况我们能控制吗?我想重复使用我的游标对象,但又不想让内存被耗尽……
2 个回答
2
默认情况下,缓存的大小相当大(大约2MB),而且这个大小是针对每个连接的。你可以通过以下SQL语句把它设置得更小:
PRAGMA cache_size=-KB
如果你想设置缓存大小为千字节(KB),可以使用负号'-',否则它会设置为使用的页面数量。
另外,如果你使用多个连接,可能想要使用共享缓存来节省内存:SQLITE: 共享缓存