2015-08-14 5 views
0

У меня проблема с моим Android-приложением. Моя проблема в том, что у меня есть List, и я натягиваю на него 40-килограммовую линию BDD. Когда я помещаю все данные в мое List, приложение становится медленным. Есть ли способ оптимизации создания объекта?Java-приложение для Java для многих объектов

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&#65109; GC_FOR_ALLOC freed 1230K, 5% free 62021K/64839K, paused 377ms 
D/dalvikvm&#65109; GC_FOR_ALLOC freed 1223K, 5% free 62033K/64839K, paused 367ms 
D/dalvikvm&#65109; GC_FOR_ALLOC freed 1222K, 5% free 62044K/64839K, paused 401ms 
D/dalvikvm&#65109; GC_FOR_ALLOC freed 1220K, 5% free 62056K/64839K, paused 412ms 
D/dalvikvm&#65109; GC_FOR_ALLOC freed 1220K, 5% free 62067K/64839K, paused 418ms 
D/dalvikvm&#65109; GC_FOR_ALLOC freed 1285K, 5% free 62080K/64903K, paused 420ms 
D/dalvikvm&#65109; GC_FOR_ALLOC freed 1293K, 5% free 62092K/64903K, paused 428ms 
D/dalvikvm&#65109; GC_FOR_ALLOC freed 1283K, 5% free 62104K/64903K, paused 420ms 
+1

Вы рассматривали использование ленивой загрузки или разбивки на страницы? – Chaosit

+0

если я понял, что вы говорите, я использую AsyncTask для загрузки моих данных и помещаю их в свой список Quentin

+0

Зачем вы загружаете 40k баллов? Чтобы отобразить их? – Gordak

ответ

0

Похоже, что 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; 
} 
+0

Я пробовал ваше решение, выполнение занимает 3 минуты, а мой метод занимает 2min11sec. – Quentin

+0

@Quentin Ах, я ошибаюсь «ContentValues» - это своего рода «Список», но это не так. Через некоторое время я удалю свой ответ. – hata

Смежные вопросы