我的Android应用程序有一个问题。我的问题是,我有一个List
和我拉它40K线的BDD。当我将所有数据放入List
时,应用程序变得很慢。是否有优化对象实例化的方法?
private List<ContentValues> addObjects(ResultSet rst) throws DaoException, SQLException {
//Ajout dans la BDD local SQLlite
List<ContentValues> values = new ArrayList<>();
ContentValues value = new ContentValues();
while (rst.next()) {
value.put("Numero", rst.getInt("Numéro"));
value.put("AR_Ref", rst.getString("AR_Ref"));
value.put.....
.........;
values.add(new ContentValues(value));
}
return values;
}
Logcat: GC工作很多。
D/dalvikvm﹕ GC_FOR_ALLOC freed 1230K, 5% free 62021K/64839K, paused 377ms
D/dalvikvm﹕ GC_FOR_ALLOC freed 1223K, 5% free 62033K/64839K, paused 367ms
D/dalvikvm﹕ GC_FOR_ALLOC freed 1222K, 5% free 62044K/64839K, paused 401ms
D/dalvikvm﹕ GC_FOR_ALLOC freed 1220K, 5% free 62056K/64839K, paused 412ms
D/dalvikvm﹕ GC_FOR_ALLOC freed 1220K, 5% free 62067K/64839K, paused 418ms
D/dalvikvm﹕ GC_FOR_ALLOC freed 1285K, 5% free 62080K/64903K, paused 420ms
D/dalvikvm﹕ GC_FOR_ALLOC freed 1293K, 5% free 62092K/64903K, paused 428ms
D/dalvikvm﹕ GC_FOR_ALLOC freed 1283K, 5% free 62104K/64903K, paused 420ms
看起来value
随着循环次数的增加而增加。
我认为value
应该在循环开始时实例化(在和里面),values
应该在循环结束时添加value
。
private List<ContentValues> addObjects(ResultSet rst) throws DaoException, SQLException {
List<ContentValues> values = new ArrayList<>();
while (rst.next()) {
ContentValues value = new ContentValues();
value.put("Numero", rst.getInt("Numéro"));
value.put("AR_Ref", rst.getString("AR_Ref"));
value.put.....
.........;
values.add(value);
}
return values;
}