Android性能优化——数据库SQLite
2016-08-27 13:47
281 查看
数据库操作:
1.使用事务进行批量数据操作:
数据库操作的本质是对磁盘文件的操作,频繁操作文件是一个耗时操作,影响数据库的存取速度。使用事务会降低数据库文件的开关频率,从而节约操作时间:
普通方式:
事务方式:
测试:
结果:
对比发现使用事务进行批量操作消耗的时间远远小于正常操作。
2.尽量使用sqliteOpenHelper.getReadableDatabase()连接数据库。getWritableDatabase()以读写的方式连接数据库,若数据库磁盘已满,将无法写入,会报错;而getReadableDatabase()先已读写的方式连接数据库,若数据库磁盘空间已满,便改为以只读的方式打开。
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()先已读写的方式连接数据库,若数据库磁盘空间已满,便改为以只读的方式打开。
相关文章推荐
- Android数据库SQLite性能优化技巧
- Android数据库SQLite性能优化技巧
- Android数据库SQLite性能优化技巧
- Android中数据库Sqlite的性能优化
- 关于Android 数据库SQLite性能优化
- Android性能优化之数据库优化
- android性能优化之数据库优化一
- Android性能优化之数据库优化
- Android性能优化的——数据库性能优化
- Android 中 SQLite 性能优化
- Android数据库批量操作的性能优化
- Android性能优化之数据库优化
- android性能优化---数据库优化
- Android开发之性能优化(数据库优化)
- Android中sqlite性能优化
- Android SQLite数据库优化
- Android性能优化之数据库优化
- 【android】 批量插入数据到sqlite的性能优化
- Android之Sqlite性能优化
- Android性能优化之数据库优化