Einzelnen Beitrag anzeigen

SearchBot

Registriert seit: 27. Jun 2004
Ort: N-W vom Bodensee
272 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

String kopieren, was ist schneller?

  Alt 8. Jan 2015, 09:32
Hallo,

ich suche eine Optimierung.
Folgendes Projekt habe ich da: 150MB String, genaugenommen rund 10000 Zeilen mit je ca. 18kB Zeilenlänge, von denen ich aber nur rund 1800 Zeichen brauche, und von denen auch nur 30 Zeichen pro Zeile

Mit den optimierten (und leicht umgebauten) Fastcode-Challenge-Routinen von StringReplace setze ich mir in wenigen Sekunden rund 30000 Marker im String, nach diesen Markern steht die Info, die ich brauche.

Delphi-Quellcode:
var TeilString, Riesenstring: AnsiString; p:integer;
//Marker ist ein einzelnes Char, zB #9
p:=PosEx(Marker,RiesenString);
repeat
 Teilstring:=copy(Riesenstring,p,1800);
 RiesenString[p]:=#32; //löschen des Markers
 p:=PosEx(Marker,RiesenString);
 //..Mache was mit dem Teilstring.. (3x weitere copy mit anderen Markern)
until p=0;
Das Copy braucht ne Weile und 150MB extra (offenbar für eine Arbeitskopie des Strings).
Gibt es was schnelleres als Copy? CopyBlock vielleicht?
Gerne auch ohne, daß nochmal 150MB im Speicher benötigt werden, weshalb ich auch auf gleiche Stringtypen achte, damit hoffentlich keine zeitaufwändige Konvertierung im Hintergrund nötig ist.

Derzeit benötigt meine Routine rund 50s für 100 Zeilen...

Danke schonmal fürs mitdenken
  Mit Zitat antworten Zitat