我有一个使用CursorAdapter来显示一些数据的ListActivity。此数据是web服务调用的结果。
我从web服务调用中获得响应,使用org.json.*库解析它,然后将结果写入应用程序的SQLite3数据库。然后重新查询ListActivity的游标,数据显示在列表中。
我的问题是数据库写得太慢了。我能想到的唯一一件事就是不使用CursorAdapter,只将这些数据保存在内存中。我希望有人能有另一个建议来加快速度。也许是某种批量插入?
应该注意的是,我使用ContentProvider来执行插入操作。所以我调用getContentResolver().insert(...)。
以下是一个测试的一些时间,该测试通过LAN检索了56行数据并显示了它们:
响应时间: 178ms
解析json的时间: 16ms
向数据库写入56行的时间: 5714ms
对于这些数据量,我最终希望数据库写入的时间不超过1000ms。
发布于 2011-07-01 19:58:56
我曾经遇到过这样的问题,我发现首先在数据库上调用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行(在这种情况下为一批的大小)从大约30秒减少到300ms左右。
发布于 2011-07-01 19:36:37
您是对写入数据库的每一行执行一次往返,还是将所有行都批处理为一次往返?我敢打赌,如果你不批量处理,网络延迟就是罪魁祸首。
https://stackoverflow.com/questions/6552469
复制相似问题