我有一个快速的表现问题;我有一个ListView适配器填充列表视图,我打开我的sqlite数据库并在填充视图结束时关闭它,我从SQLite数据库填充有关列表行的一些信息。我注意到这样做会带来严重的性能影响,主要是在滚动时才有意义。我想知道如何提高滚动性能。我查询数据库大约3次。
Database db = new Database(context);
db.open();
viewHolder.first.setText(db.queryFirst());
viewHolder.second.setText(db.querySecond());
viewHolder.third.setText(db.queryThird());
db.close();
我应该将DB作为实例变量引用,只是在查询时打开和关闭,或者我应该怎么做?
答案 0 :(得分:2)
我想知道如何提高滚动性能。我查询数据库大约3次。
我建议为整个适配器查询一次数据库。目前,您要为每行发送三个查询,但不会缓存任何查询。从驱动器读取是一个缓慢的过程,Cursors旨在非常有效地获取大量数据,而CursorAdapter旨在使用尽可能少的资源。使用一个Cursor和一个CursorAdapter将允许用户滚动而不会注意到任何性能损失。
答案 1 :(得分:0)
还有一个名为ORMLite的库,它允许您非常轻松地操作数据库并返回列表,这意味着您首先加载数组并且没有任何滚动性能问题。这与数据库的延迟加载部分相结合,可以无缝地提高滚动的性能。