Текущий архив: 2015.09.10;
Скачать: CL | DM;
Вниз
SQLite + FireDAC Найти похожие ветки
← →
FMX (2014-03-10 16:20) [0]Нужно пробежать таблицу из 100 000 записей.
Делаю так:
procedure TForm1.ShowAllRecordsClick(Sender: TObject);
var
TableItem: TADTable;
I: Integer;
FieldID, FieldName: TField;
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
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
ListBox1.EndUpdate;
end;
finally
TableItem.Free;
end;
end;
Практически мгновенно пробегаются первые 8 000 записей, затем пробег резко замедляется и дальше перебирает еле-еле. Почему так происходит? Как ускорить перебор?
← →
Inovet © (2014-03-10 16:45) [1]Ты все 100500 тыщ в ЛистБокс впихиваешь? Выход один - дождаться выпуска новых 100500 ядерных процессоров со 100500 гигами памяти на каждом, и новой ОС с новым ЛистБоксом под них. Впрочем, есть ещё варианты.
← →
Inovet © (2014-03-10 16:47) [2]Кстати, Скайп, которым теперь МС занимается, как раз так и делает и как раз из SQLite. Так что ждём-с.
← →
sniknik © (2014-03-11 07:57) [3]DisableControls
+
вот это - TableItem.RecordCount вынести за цикл... нафига дергать метод объекта каждый раз кто знает что в нем "лишнего" делается...
Страницы: 1 вся ветка
Текущий архив: 2015.09.10;
Скачать: CL | DM;
Память: 0.44 MB
Время: 0.043 c