首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >加速数据库写入

加速数据库写入
EN

Stack Overflow用户
提问于 2011-07-02 03:34:00
回答 2查看 569关注 0票数 3

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

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

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

应该注意的是,我使用ContentProvider来执行插入操作。所以我调用getContentResolver().insert(...)。

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

响应时间: 178ms

解析json的时间: 16ms

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

对于这些数据量,我最终希望数据库写入的时间不超过1000ms。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-02 03:58:56

我曾经遇到过这样的问题,我发现首先在数据库上调用beginTransaction(),然后再执行插入查询。示例代码:

代码语言:javascript
运行
复制
    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左右。

票数 2
EN

Stack Overflow用户

发布于 2011-07-02 03:36:37

您是对写入数据库的每一行执行一次往返,还是将所有行都批处理为一次往返?我敢打赌,如果你不批量处理,网络延迟就是罪魁祸首。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6552469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档