![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQLite + FireDAC
FMX © (2014-03-10 16:20:00)Нужно пробежать таблицу из 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 записей, затем пробег резко замедляется и дальше перебирает еле-еле. Почему так происходит? Как ускорить перебор?
sniknik (2014-03-11 07:57:00) [1]DisableControls
+
вот это - TableItem.RecordCount вынести за цикл... нафига дергать метод объекта каждый раз кто знает что в нем "лишнего" делается...
Inovet (2014-03-10 16:47:00) [2]Кстати, Скайп, которым теперь МС занимается, как раз так и делает и как раз из SQLite. Так что ждём-с.
Inovet (2014-03-10 16:45:00) [3]Ты все 100500 тыщ в ЛистБокс впихиваешь? Выход один - дождаться выпуска новых 100500 ядерных процессоров со 100500 гигами памяти на каждом, и новой ОС с новым ЛистБоксом под них. Впрочем, есть ещё варианты.