Android性能优化——数据库SQLite

数据库操作:
1.使用事务进行批量数据操作:
数据库操作的本质是对磁盘文件的操作,频繁操作文件是一个耗时操作,影响数据库的存取速度。使用事务会降低数据库文件的开关频率,从而节约操作时间:

普通方式:

public void insertMemberListNormal(List<MemberModel> memberModelList){
        int size = memberModelList.size();
        for (int i = 0;i < size;i++){
            ContentValues contentValues = new ContentValues();
            contentValues.put(DBConfig.MEMBER_ID,memberModelList.get(i).getMemberId());
            contentValues.put(DBConfig.MEMBER_NAME, memberModelList.get(i).getName());
            db.insert(DBConfig.TAB_MEMBER_NAME, null,contentValues);
        }
    }

事务方式:

public void insertMemberListWithTransaction(List<MemberModel> memberModelList){
        db.beginTransaction();
        try {
            int size = memberModelList.size();
            for (int i = 0;i < size;i++){
                ContentValues contentValues = new ContentValues();
                contentValues.put(DBConfig.MEMBER_ID,memberModelList.get(i).getMemberId());
                contentValues.put(DBConfig.MEMBER_NAME, memberModelList.get(i).getName());
                db.insert(DBConfig.TAB_MEMBER_NAME, null, contentValues);
            }
            db.setTransactionSuccessful();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            db.endTransaction();
        }
    }

测试:

MemberDBService memberDBService = new MemberDBService(this);
        ArrayList<MemberModel> memberModelList= new ArrayList<>();
        for(int i = 0;i < 100;i++){
            MemberModel memberModel1 = new MemberModel();
            memberModel1.setName("lxfeng"+i);
            memberModel1.setMemberId(i + "");
            memberModel1.setAge(24);
            memberModelList.add(memberModel1);
        }

        long startTimeTransaction = System.currentTimeMillis();
        memberDBService.insertMemberListWithTransaction(memberModelList);
        long endTimeTransaction = System.currentTimeMillis();
        Log.e(TAG, "transaction insert time:" + (endTimeTransaction - startTimeTransaction));

        long startTimeNomal = System.currentTimeMillis();
        memberDBService.insertMemberListNormal(memberModelList);
        long endTimeNormal = System.currentTimeMillis();
        Log.e(TAG,"normal insert time:" + (endTimeNormal - startTimeNomal));

结果:

MainActivity﹕ transaction insert time:26
MainActivity﹕ normal insert time:717

对比发现使用事务进行批量操作消耗的时间远远小于正常操作。

2.尽量使用sqliteOpenHelper.getReadableDatabase()连接数据库。getWritableDatabase()以读写的方式连接数据库,若数据库磁盘已满,将无法写入,会报错;而getReadableDatabase()先已读写的方式连接数据库,若数据库磁盘空间已满,便改为以只读的方式打开。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值