Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Verzeichnisse in Listbox auflisten

  Alt 7. Mai 2004, 08:25
@DataCool: Nix gegen dich persönlich aber deine Funktion ist ziemlich unperformant da du mit copy ständig nen riesen string neu zusammensetzt... Von der Performance her sollte folgende Procedure um einiges besser sein..
Delphi-Quellcode:
procedure splitString(const Source: String; const Delimiter: String; var Dest: TStringlist);
var count: Integer;
    LStartpos, LEndepos, LSourcelength: Integer;
begin
 Dest.Clear;
 count := 1;
 LStartpos := 0;
 LEndepos := 0;
 LSourcelength := length(Source);
 while count <= LSourcelength do
 begin
  if copy(Source, count, length(Delimiter)) = Delimiter then
  begin
   LEndepos := count;
   dest.Add(copy(Source, LStartpos + 1, LEndepos - LStartpos - 1));
   LStartpos := count + length(Delimiter) - 1;
   count := count + length(Delimiter);
  end else begin
   count := count + 1;
  end;
 end;
 if LEndePos <> Count - length(Delimiter) then
    dest.Add(copy(Source, LStartpos + 1, count - LStartpos - 1));
end;

Hab eben noch nen kleinen Test durchgeführt. Meine Funktion brauchte für einen kleinen String von 10 MB (jedes vierte zeichen ein Delimiter) zwischen 7 und 8 Sekunden. Die Funktion von Datacool wurde jedesmal nach ca 13 Sekunden mit dem Fehler "Out of Memory" beendet. Keine Ahnung wann bei meiner Funktion so eine Meldung kommmt. Den größten String den ich bisher damit zerlegt hab war ein etwa 50 MB großer String (Datenbank-Tabellen-Abbild)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat