【发布时间】:2015-10-23 20:05:54
【问题描述】:
我在 TABLE_CONTACT 中有大约 1500 条记录。我获取联系人的代码:
public ArrayList<SBContact> getAllContacts() {
SQLiteDatabase database = dbHelper.getWritableDatabase();
ArrayList<SBContact> mContacts = new ArrayList<SBContact>();
String selectQuery = "SELECT * FROM " + SBDatabaseHelper.TABLE_CONTACT;
Cursor cursor = database.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
SBContact result = new SBContact(cursor.getString(cursor.getColumnIndex(SBDatabaseHelper.CONTACT_NUMBER)),
cursor.getString(cursor.getColumnIndex(SBDatabaseHelper.CONTACT_NAME)), cursor.getInt(cursor.getColumnIndex(SBDatabaseHelper.EXITS_USER)));
mContacts.add(result);
} while (cursor.moveToNext());
}
return mContacts;
}
问题是:我第一次运行这个方法,大约需要15ms。 5秒后我再次运行这个方法,大约需要20 seconds。
同理,第一次调用后,15s 后,再次运行方法,大约需要10 seconds。 2分钟后,再次运行该方法,第一次运行大约需要15ms。
此时,没有其他线程对数据库进行读/写查询。
我不明白SQLiteDatabase 的作用。需要时间来释放内存还是做点什么?
已编辑
对不起,这不是SQLiteDatabase 的问题。有关此案例的更多详细信息,请参阅我的回答。
【问题讨论】:
-
只选择您实际使用的联系人中的行,而不是
* -
您的意思是
columns而不是rows?我的表只有 2 列,所以我认为使用*不是问题。 -
是的,对不起,我的意思是列!另外,好的捕获可能愿意在 SQLiteDatabase 对象上测试查询与 rawQuery 的性能差异。这个数据集有多大?
-
为什么要在
do..while循环中迭代光标? -
你认为为什么需要加载所有数据?