Schneller geht es aber, wenn man noch mit BeginUpdate arbeitet.
Ist zwar etwas aufwändiger, aber es lohnt sich.
Delphi-Quellcode:
Memo.Lines.BeginUpdate;
try
while not <DS>.Eof do
begin
...
Memo.Lines.Add(...);
...
inc(i);
if i and 15 = 0 then
begin
Memo.Lines.EndUpdate;
try
Application.ProcessMessages;
finally
Memo.Lines.BeginUpdate;
end;
end;
<DS>.Next;
end;
finally
Memo.Lines.EndUpdate;
end;
Wobei ich es seitabhängiger lieber hab, da man ja nie weiß, wie schnell der PC ist und wie lange die ganze Verarbeitung dauert.
Delphi-Quellcode:
C := GetTickCount;
Memo.Lines.BeginUpdate;
try
while not <DS>.Eof do
begin
...
Memo.Lines.Add(...);
...
if GetTickCount - C > 150 then // alle 150 ms
begin
Memo.Lines.EndUpdate;
try
Application.ProcessMessages;
finally
Memo.Lines.BeginUpdate;
end;
C := GetTickCount;
end;
<DS>.Next;
end;
finally
Memo.Lines.EndUpdate;
end;