您的位置:首页 > 移动开发 > Android开发

Android性能优化——数据库SQLite

2016-08-27 13:47 281 查看
数据库操作:

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()先已读写的方式连接数据库,若数据库磁盘空间已满,便改为以只读的方式打开。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息