Einzelnen Beitrag anzeigen

Benutzerbild von Totti
Totti

Registriert seit: 1. Dez 2004
Ort: Harrislee
59 Beiträge
 
Delphi 2005 Personal
 
#22

Re: Lesen, Schreiben und mehr in Textdateien - TFileStream,

  Alt 28. Nov 2005, 10:46
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.
Malte
  Mit Zitat antworten Zitat