Перейти к содержанию
Fire Monkey от А до Я
  • 0

Тормоза с TADTable и SQLite при переборе 100 000 записей


0xdeadc0de

Вопрос

Наблюдаю жесточайшие тормоза при переборе SQLite-таблицы на 100 000 записей. 
 
Алгоритм перебора:
procedure TForm1.btn_ShowAllRecordsClick(Sender: TObject);
var
  FieldID, FieldName: TField;
  I: Integer;
  TableItem: TADTable;
begin
  TableItem := TADTable.Create(nil);
  try
    TableItem.Connection := ADConnection1;
    TableItem.Open('item');
    FieldID := TableItem.FieldByName('id');
    FieldName := TableItem.FieldByName('name');
    TableItem.First;
    I := 1;
    ListBox1.BeginUpdate;
    try
      TableItem.DisableControls;
      try
        while not TableItem.Eof do
        begin
          if I mod 250 = 0 then
            Caption := Format('%d of %d', [I, TableItem.RecordCount]);
          ListBox1.Items.Add(Format('id: %d; name: %s', [FieldId.AsInteger, FieldName.AsString]));
          TableItem.Next;
          Inc(I);
        end;
      finally
        TableItem.EnableControls;
      end;
    finally
      ListBox1.EndUpdate;
    end;
  finally
    TableItem.Free;
  end;
end;
Первые 7 000 записей перебираются мгновенно. После перебор резко замедляется и дальше выполняется еле-еле. 100 000 записей перебирает около 30 минут. В чем может быть проблема?
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Добавление в листбокс ресурсоемкое дело. Попробуй закоментировать строку  

// ListBox1.Items.Add(Format('id: %d; name: %s', [FieldId.AsInteger, FieldName.AsString]));

и проверь скорость работы

Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...