Hallo,
ich habe von FastMM gesehen, das eine Funktion Speicher verbrät, in dieser Funktion wird ein String in 2 Teile getrennt.
Da geht jedes mal quasi die Länge des übergebenen Strings verloren.
Wenn man das 5000 mal macht, sind auch 50 Bytes eine Menge.
Die Funktion spaltet einen übergebenen String auf in 2 Teile, vor dem Trenner und nach dem übergebenen Trennzeichen
Bsp:
strPara := 'Welt=Delphi';
strResult := TrenneParaAb('=',strPara);
dann wird
strResult = 'Welt';
strPara = 'Delphi';
Delphi-Quellcode:
function TrenneParaAb(const Zeichen: String; var Para:String):String;
var
i : integer;
begin
result:='';
If Pos(Zeichen,Para) > 0 then begin
If length(Zeichen)=1
then begin
{ 1 Zeichen }
i:=Pos(Zeichen,Para);
If i>0 then begin
result:= copy(Para,1,Pred(i));
delete(Para,1,i); <-------------- Die Zeile gibt FastMM an
end;
end
else begin
{ Hier mehrere Zeichen übergeben }
i:=Pos(Zeichen,Para);
If i>0
then begin
result:=copy(Para,1,Pred(i));
delete(Para,1,(i+Pred(length(Zeichen))));
end;
end;
end; { If Pos }
end;
Gibt es bessere Stringfunktionen als die von Delphi?
Hier noch das Listing von FastMM
Aufrufstack, von wem der Block momentan belegt wird (Rücksprungadressen):
403132 [sys\system.pas][System][System.@GetMem][2654]
405575 [sys\system.pas][System][System.@NewAnsiString][12429]
40595B [sys\system.pas][System][System.InternalUniqueString][13256]
4059E6 [sys\system.pas][System][System.@LStrDelete][13380]
4870D3 [..\common\FileUtils.pas][FileUtils][FileUtils.TrenneParaAb][415]
Für Tips wäre ich dankbar,
Gruß
Tom