1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
const ItemsCount = 214621; //< valeur limite because mem-vive-dispo insuffisante pour 5 millions de résultats
lgLig = 30; // nombre de caractères par ligne
DureeMax = 30000; // soit 30 secondes
var Start : DWord;
function Resu(i, lgLig : integer) : string;
var s : string;
begin s:=intToStr(i)+' ';
Result:=s+StringOfChar('8',LgLig - length(s));
end;
// Impact d'un label4.Caption:= dans une boucle de RichEdit.lines.Add
procedure TfrmGenP.btnBoucleAddAvecSansLabelClick(Sender: TObject);
var i : integer;
begin //RE1.Lines.Capacity:=ItemsCount;
RE1.MaxLength := $7FFFFFF0; // RE1 = RichEdit
RE1.clear;
RE1.Update;
Start:=GetTickCount;
i:=-1;
try
repeat inc(i);
RE1.Lines.Add(Resu(i,lgLig));
//label4.Caption:=IntToStr(i);
//label4.Update;
until (GetTickCount-Start >= DureeMax) or (i=ItemsCount-1)
Finally
Edit2.text:='Pour durée max = '+intToStr(DureeMax)+' ms traité '+intToStr(i)+' lignes '+intToStr(GetTickCount-Start)+' ms';
//Avec RichEdit et :
//- avec label4.Caption et Pour durée max = 30000 ms traité 7919 lignes
//- sans label4.Caption et Pour durée max = 30000 ms traité 12379 lignes
end;
end;
// Intérêt du BeginUpdate et du EndUpdate :
procedure TfrmGenP.btnBoucleAddEtUpdatesClick(Sender: TObject);
var i : integer;
begin //RE1.Lines.Capacity:=ItemsCount;
RE1.MaxLength := $7FFFFFF0;
Start:=GetTickCount;
RE1.clear;
RE1.Lines.BeginUpdate;
i:=-1;
try repeat inc(i);
RE1.Lines.Add(Resu(i,lgLig));
until (GetTickCount-Start >= DureeMax) or (i=ItemsCount-1)
finally
RE1.Lines.EndUpdate;
Edit2.text:='Pour durée max = '+intToStr(DureeMax)+' ms traité '+intToStr(i)+' lignes '+intToStr(GetTickCount-Start)+' ms';
// Pour durée max = 30000 ms traité 13355 lignes
end;
end;
// Intérêt de passer par un MemoryStream:
procedure TfrmGenP.btnAvecMemStreamClick(Sender: TObject);
var i : integer; MS : TMemoryStream;
begin //RE1.Lines.Capacty:=ItemsCount;
RE1.MaxLength := $7FFFFFF0;
Start:=GetTickCount;
RE1.clear;
RE1.Update;
//RE1.Lines.BeginUpdate; //< sans intérêt avec MemoryStream
MS := TMemoryStream.Create;
i:=-1;
try repeat inc(i);
MS.Write(PChar(Resu(i,lgLig)+#13#10)^,LgLig+2);
until (GetTickCount-Start >= DureeMax) or (i=ItemsCount-1);
MS.Position:=0;
RE1.Lines.LoadFromStream(MS);
finally
//RE1.Lines.EndUpdate;
Edit2.text:='Pour durée max = '+intToStr(DureeMax)+' ms traité '+intToStr(i)+' lignes '+intToStr(GetTickCount-Start)+' ms';
MS.Free;
//- sans BeginUpdate, Pour durée max = 30000 ms traité 214621 lignes 14731 ms
//- avec BeginUpdate, Pour durée max = 30000 ms traité 214621 lignes 14683 ms
end;
end;
procedure TfrmGenP.FormShow(Sender: TObject);
begin RE1.lines.add(fGoMoKo(memDispo)); // mem vive libre
end; |
Partager