greenDAO 40秒插入600条记录

时间:2012-10-05 14:58:16

标签: android greendao

我选择了greenDAO,因为它的网站声称它是Android上最快的ORM系统之一。对于我的失望,它需要40秒才能在三星i9001上插入600条记录。我不确定我做错了什么。

你能否建议减少执行这些操作所需的时间?

生成器代码:

private static void addNewsArticle(Schema schema) {
    Entity article = schema.addEntity("NewsArticle");
    article.addIdProperty().autoincrement();
    article.addStringProperty("title").notNull();
    article.addStringProperty("body").notNull();
    article.addStringProperty("shortDescription").notNull();
    article.addStringProperty("thumb");
    article.addDateProperty("date").notNull();
}

插入

Date now = Calendar.getInstance().getTime();
for (int i = 0; i < 600; i++) {
    NewsArticle testArticle = new NewsArticle();
    testArticle.setTitle("title-text" + i);
    testArticle.setBody("body-text" + i);
    testArticle.setShortDescription("short-text" + i);
    testArticle.setDate(now);
    newsArticleDao.insert(testArticle);
}

4 个答案:

答案 0 :(得分:39)

我怀疑事情没有在单个sql语句中执行。为了实现它,只需在DAO对象上使用insertInTx。

以上代码略有变化,使其在半秒内运行

NewsArticle[] newsArticles = new NewsArticle[600];
NewsArticle testArticle;
    for (int i = 0; i < 600; i++) {
         testArticle = new NewsArticle();
         testArticle.setTitle("title-text" + i);
         testArticle.setBody("body-text" + i);
         testArticle.setShortDescription("short-text" + i);
         testArticle.setDate(now);
         newsArticles[i] = testArticle;
    }
newsArticleDao.insertInTx(newsArticles);

答案 1 :(得分:9)

您还可以创建一个新的Runnable,它可以在DaoSession.runInTx函数中运行所有插入

daoSession.runInTx(new Runnable {
    public void run(){
        Date now = Calendar.getInstance().getTime();
        for (int i = 0; i < 600; i++) {
             NewsArticle testArticle = new NewsArticle();
                     testArticle.setTitle("title-text" + i);
                     testArticle.setBody("body-text" + i);
                     tesArticle.setShortDescription("short-text" + i);
                     testArticle.setDate(now);
                     newsArticleDao.insert(testArticle);
        }
   }
});

答案 2 :(得分:1)

这里给出了一篇关于加速Android的SQLITE插入操作的优秀文章。 试用这个我可以在同步39MB DB的情况下将同步模块的速度从1.2小时大幅提升到14分钟。

http://tech.vg.no/2011/04/04/speeding-up-sqlite-insert-operations/

如果您需要代码spinnet,请告诉我。

答案 3 :(得分:0)

我尝试过以下提到并获得最佳性能

        DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "db-name",
                null);
        SQLiteDatabase dbGreen= helper.getWritableDatabase();

        dbGreen.beginTransaction();

        //Perform your insertion here
        dbGreen.setTransactionSuccessful();
        dbGreen.endTransaction();