我有一个ListActivity,它使用CursorAdapter来显示一些数据。此数据是Web服务调用的结果。
我从Web服务调用获取响应,使用org.json。*库解析它,然后将结果写入应用程序的SQLite3数据库。然后重新查询ListActivity的Cursor,数据显示在列表中。
我的问题是数据库写入速度过慢。我唯一能想到的就是不使用CursorAdapter并将这些数据保存在内存中。我希望有人有另一个建议来加快速度。也许是某种批量插入?
应该注意的是,我正在使用ContentProvider进行插入。所以我调用了getContentResolver()。insert(...)。
以下有一些时间是通过LAN检索56行数据并显示它们的测试:
回复时间:178毫秒
解析json的时间:16ms
将56行写入数据库的时间:5714ms
我最终希望数据库写入时间不到1000毫秒。
答案 0 :(得分:2)
我遇到了一些问题,发现首先在数据库上调用beginTransaction(),然后执行插入查询。示例代码:
public void insertClassBatch(ArrayList<Class> batch) throws Exception
{
this.getWritableDatabase().beginTransaction();
for (Class c : batch)
{
this.insertClassStatement.bindString(1, c.getClassName());
this.insertClassStatement.bindString(2, c.getClassValue());
this.insertClassStatement.executeInsert();
}
this.getWritableDatabase().setTransactionSuccessful();
this.getWritableDatabase().endTransaction();
}
这减少了插入100行(在这种情况下批量的大小)从大约30s到300ms左右。
答案 1 :(得分:0)
您是否为您写入数据库的每一行都进行了一次往返,或者您可以将所有这些行分批往返一次?我敢打赌,如果你没有批处理,网络延迟是罪魁祸首。