【发布时间】:2011-12-07 11:18:12
【问题描述】:
如何快速将 tadotable 中的数百万条记录加载到字符串列表中?
procedure TForm1.SlowLoadingIntoStringList(StringList: TStringList);
begin
StringList.Clear;
with SourceTable do
begin
Open;
DisableControls;
try
while not EOF do
begin
StringList.Add(FieldByName('OriginalData').AsString);
Next;
end;
finally
EnableControls;
Close;
end;
end;
【问题讨论】:
-
这里的瓶颈可能是数据库和/或 ado 驱动程序而不是字符串列表,尽管您可以尝试分析以确定。如果得到确认,您将需要更快的数据库或更好的驱动程序来加快速度。
-
你可以尝试设置 Stringlist.Capacity := SourceTable.RecordCount;这将节省大量底层数组的重新分配
-
这里比较慢的是
FieldByName('OriginalData')。 -
并尝试使用直接链接到 OleDB 提供程序来绕过 ADO 层。例如,请参阅我们的Open Source unit。
-
清理我之前的评论 - 我刚刚尝试了一个非常简单的 1000 万条记录循环,它只是稍微快了一点(大约 15%)。
标签: delphi tstringlist tadotable