Okay, habe mit unten stehendem Code mal die Zeit gemessen
a) Einlesen in ein Array mittels textfile
b) Nutzen einer TStringList
Habe jeweils eine 1,6MB große Textdatei mit ca 280.000 Zeilen eingelesen und dann nach einer Zeile gesucht.
Es wird auch jeweils wieder der Speicher freigegeben (hoffe ich ^^).
Die Methode a) ist definitiv schneller (liegt meist bei ~92ms) als b) (meist ~125ms). Sind zwar nur 30ms ...
wenn mans aber 30x macht, isset schon ne Sekunde ... bei 3.000 Aktionen hat man 10 Sekunden
Nehme jedoch auch gerne Hinweise an, wie ich die beiden Algos weiter optimieren kann (das setzen der capazity bei der Liste bringt wirklich was
- beim Array jedoch eher nicht)!
Delphi-Quellcode:
function doArray: integer;
var
arr: array of String[50];
f: textfile;
i: integer;
tmpStr: string[50];
begin
Assignfile(f, path);
reset(f);
setlength(arr,500000);
// setlength(arr,0);
i:=0;
while not eof(f) do
begin
// setlength(arr,length(arr)+1);
readln(f,arr[i]);
inc(i);
end;
setlength(arr,i);
CloseFile(f);
i:=0;
while not (arr[i] = 'Ballack') do
inc(i);
result:=i;
setlength(arr,0);
tmpstr:='';
end;
function doList: integer;
var
list: TSTringList;
begin
list:=TSTringList.create;
list.Capacity:=500000;
list.LoadFromFile(path);
result:=list.IndexOf('Ballack');
FreeAndNil(list);
end;
var
time: integer;
begin
{ TODO -oUser -cConsole Main : Hier Code einfügen }
{ time:=GetTickCount;
writeln(IntToStr(doArray));
writeln(IntToStr(GetTickCount-time));}
time:=GetTickCount;
writeln(IntToStr(doList));
writeln(IntToStr(GetTickCount-time));
readln;
end.