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