AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Lesen, Schreiben und mehr in Textdateien - TFileStream, ...?
Thema durchsuchen
Ansicht
Themen-Optionen

Lesen, Schreiben und mehr in Textdateien - TFileStream, ...?

Ein Thema von Totti · begonnen am 12. Nov 2005 · letzter Beitrag vom 4. Dez 2005
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz