GreenDao 学习笔记 6


简介


refresh 方法,以及之前的两个问题。


refresh 方法


  public void refresh() {
        if (myDao == null) {
            throw new DaoException("Entity is detached from DAO context");
        }    
        myDao.refresh(this);
    }

GreenDao 生成的实体类都有这么个方法,作用是重新从数据库获得值覆盖对实体的修改。

(你觉得有什么地方会用到这个方法?)



性能测试


long startTime = System.currentTimeMillis();

        for (int i = 0; i != 400; i++) {

            Person person = new Person(null,i+"");
            personDao.insert(person);
        }

        long endTime = System.currentTimeMillis();

        Log.e("result",""+(endTime - startTime));

我做了个简单的性能测试,插入 400 条数据,用时超过 5 秒,无怪乎提倡操作数据库时开启新的线程了。
好吧,一定是搞错了什么。

GreenDao 将任何数据库操作都作为一个事务处理,也就是说上面的写法是执行了 400 个事务。

daoSession.runInTx(new Runnable() {

                               @Override
                               public void run() {
                                   long startTime = System.currentTimeMillis();

                                   for (int i = 0; i != 400; i++) {

                                       Person person = new Person(null, i + "");
                                       personDao.insert(person);
                                   }

                                   long endTime = System.currentTimeMillis();
                                   Log.e("result", "" + (endTime - startTime));
                               }
                           }
        );

或者

 long startTime = System.currentTimeMillis();

        Person[] persons = new Person[400];
        for (int i = 0; i != 400; i++) {
            persons[i] = new Person(null, i + "");
        }
        personDao.insertInTx(persons);

        long endTime = System.currentTimeMillis();
        Log.e("result", "" + (endTime - startTime));

时间都在 0.1 以内。
前者的适用性更高,而且前者启动了线程。
这样,开篇时的两个问题,解决了一个。


close 语句去哪了


cursor.close() 封装在各种操作的调用中,无需关心。
而 db.close 真心没找到,到底关不关是个头疼的问题。

一个种说法,按 GreenDao 的做法,db 是应用生命周期的,
当你 kill process 关闭应用,回收系统资源时,自然也会回收数据库资源。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值