3

我有一个 ListActivity 使用 CursorAdapter 来显示一些数据。此数据是 Web 服务调用的结果。

我从 Web 服务调用中获取响应,使用 org.json.* 库对其进行解析,然后将结果写入应用程序的 SQLite3 数据库。然后重新查询 ListActivity 的光标,数据显示在列表中。

我的问题是数据库写入速度过慢。我唯一能想到的就是不使用 CursorAdapter 并将这些数据保存在内存中。我希望有人有另一个建议来加快速度。也许是某种批量插入?

应该注意的是,我正在使用 ContentProvider 进行插入。所以我调用 getContentResolver().insert(...)。

以下是通过 LAN 检索 56 行数据并显示它们的测试中的一些时间:

响应时间:178ms

解析json的时间:16ms

向数据库写入 56 行的时间:5714ms

对于这么多数据,我最终希望数据库写入的时间低于 1000 毫秒。

4

2 回答 2

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 行(在这种情况下为批次的大小)从大约 30 秒减少到 300 毫秒左右。

于 2011-07-01T19:58:56.147 回答
0

您是否对写入数据库的每一行进行一次往返,或者您可以将它们全部批处理为一次往返?我敢打赌,如果您不进行批处理,网络延迟是罪魁祸首。

于 2011-07-01T19:36:37.060 回答