Effizienter wäre es sicher, wenn das Auswerten der Stringlist ohne IndexOf und Delete gemacht würde. Das sind zusätzliche Speicheroperationen, die nicht nötig wären, wenn man es in etwas so machen würde.
Delphi-Quellcode:
var
Lsl: TStringList;
LidxH, LidxF: integer;
Lstr, Line: string;
I: Integer;
begin
Lsl:= TStringList.Create;
try
Lsl.LoadFromFile(FFileName);
LidxH := -1;
LidxF := -1;
Lstr := '';
for I := 0 to lsl.Count -1 do
begin
Line := lsl[I].Trim;
case IndexStr(Line, [PEM_HEADER, PEM_FOOTER]) of
0: LidxH := I;
1:
if LidxH>=0 then
begin
NameNotRelevant2(Lstr);
LidxH := -1;
LidxF := -1;
Lstr := '';
end;
else
if LidxH >= 0 then
Lstr := Lstr + Line;
end;
end;
finally
Lsl.Free;
end;
end;
Es geht sicher auch, wie du es machst.
Ob diese Änderung aber schneller ist, kann ich ohne geeignete Daten nicht prüfen.
Um die Zeitdauer von bestimmten Operationen zu messen, werwende ich gerne GetTickCount. Das ist zwar nicht genau, aber man bekommt dadurch grob raus, wo es länger dauert.