我选择了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();
}
Run Code Online (Sandbox Code Playgroud)
插入
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);
}
Run Code Online (Sandbox Code Playgroud)
mid*_*ght 41
因为我怀疑事情没有在单个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);
Run Code Online (Sandbox Code Playgroud)
您还可以创建一个新的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);
}
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7031 次 |
| 最近记录: |