我有一个经常访问本地sqlite3数据库的android应用程序,出于性能考虑,所以我始终保持连接打开。但我的一位朋友建议我每次操作都打开/关闭连接。
1)你们对这两种方法的看法是什么?利弊/利弊。 2)我做了一些测试,发现数据库连接没有太多的性能开销。 DB连接的性能开销是否因DB的大小而异?
答案 0 :(得分:33)
我不知道频繁关闭/打开数据库的任何性能损失(无论其大小如何)。我认为这个问题的答案还取决于访问数据库的应用程序类型。
您是否经常“重新查询”数据库?
然后似乎纠正了它以保持开放。
每次取文时都会获取不同的数据吗?
同样,将它保持打开似乎是合理的(因为你不会获得缓存数据)。
是否有其他应用程序访问同一个数据库?
如果存在并发或阻塞问题的风险,那么在完成对/从中读取/写入数据库后关闭数据库可能是明智的。
通常我会说,在优化性能时,您可能会获得更多缓存数据,而不是让数据库保持打开状态(反对关闭数据)。
答案 1 :(得分:6)
如果您使用的是内存数据库,则关闭连接时将丢弃您的数据。
或许是一个边缘案例,但它只是把我抓了出来。
答案 2 :(得分:2)
文档说只要您需要,连接就可以打开。并且可以在onDestroy()方法中关闭。 Documentation link
持久数据库连接:
因为getWritableDatabase()和getReadableDatabase()很昂贵 在数据库关闭时调用,您应该离开数据库 只要您可能需要访问它,连接就会打开。 通常,最好在onDestroy()中关闭数据库 调用活动。
@Override
protected void onDestroy() {
mDbHelper.close();
super.onDestroy();
}
答案 3 :(得分:1)
作为补充,开放&如果从多个线程访问数据库,那么频繁关闭连接可能会导致您遇到臭名昭着的SQLite异常。
请参阅,如果您甚至通过单个连接从多个线程访问数据库并且由于这些操作不是原子操作,那么您可能会尝试更新之前由另一个线程关闭的数据库。