Как получить данные без цикла for? - PullRequest
0 голосов
/ 12 апреля 2019

Здесь я хранил одно за другим значение.API имеет 1 миллион данных.Время отклика составляет 3 секунды. Хранение кэша занимает много времени.

Как добавить все данные один раз, например, запрос на выборку вставки?

storeDefCatMaster(String url,String token) async {
  final response = await http.get(
    '${url}/v1.0/DefCatMaster',
    headers: {'Authorization': 'Bearer ${token}'},
  );
  final jsonResponse = json.decode(response.body);
  DefCatMaster model = DefCatMaster.fromJson(jsonResponse);
  int length = model.data.length;

  for(int i=0; i<length; i++) {
    var data = DataDefCatMaster(
      deF_CAT_ID: model.data[i].deF_CAT_ID,
      description: model.data[i].description,
      in_use: model.data[i].in_use,
      sortOrder: model.data[i].sortOrder
    );
    await helper.insert(data);
  }
}

1 Ответ

0 голосов
/ 12 апреля 2019

В sqflite есть пакетный API для извлечения, который сокращает время между исходным кодом и кодом дротика, что может повысить производительность.

Пример кода:

batch = db.batch();
batch.insert('Test', {'name': 'item'});
batch.update('Test', {'name': 'new_item'}, where: 'name = ?', whereArgs: ['item']);
batch.delete('Test', where: 'name = ?', whereArgs: ['item']);
results = await batch.commit();

Массовая вставка, как это:

batch = db.batch();
for(int i=0; i<length; i++) {
    var data = DataDefCatMaster(
      deF_CAT_ID: model.data[i].deF_CAT_ID,
      description: model.data[i].description,
      in_use: model.data[i].in_use,
      sortOrder: model.data[i].sortOrder
    );
    batch.insert('table_name', data);
  }
results = await batch.commit(); 
//or
//await batch.commit(noResult: true);
// if you dont want result, this will improve performance as well.

Вы по-прежнему будете использовать цикл for, но производительность с вышеупомянутым кодом будет намного выше.

...