【发布时间】:2015-08-14 13:44:06
【问题描述】:
我的 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
【问题讨论】:
-
你考虑过使用延迟加载或分页吗?
-
如果我明白你的意思,我会使用 AsyncTask 加载我的数据并将其放在我的 List
-
为什么要加载40k点?显示它们?
-
@Quentin,不,我更多的是考虑只加载您需要的那部分数据而不加载其他所有内容 - 40k 个对象对于移动设备来说是一个很大的数字 - 你确定你需要一次处理这么多的数据?
-
我从我的 BDD MS SQL 加载 40K 条目,以使用 SQLLite 将表存储在 Loca 中。
标签: java android object garbage-collection