Hey
DP,
ich bin gerade am verzweifeln
Ich finde in meinem Programm einfach nicht die Stelle, an der er unnötig Arbeitsspeicher verballert. Im Extremfall kommt er an die 2gb grenze
Ich habe versucht den Fehler einzugrenzen und es kann eigentlich nur an einer function liegen.
Gibt es also von Delphi ein eigenes Mittel, um zu überwachen für welche Variablen er wie viel Speicher nutzt ?
Delphi-Quellcode:
//PostTerm enthällt einen Mathematischen Term in Postfix Notation (UPN). Die Werte wurden als Strings in eine Queue //eingefügt
function TMath.calc(xValue: Extended): Extended;
var
tmp : TStack;
Term : TQueue;
a,b : Extended;
begin
tmp := TStack.create;
Term := TQueue.create;
repeat
Term.enqueue(PostTerm.front); //PostTerm sichern, für den nächsten x-Wert
case String(PostTerm.front)[1] of
'0'..'9': tmp.push(TExtended.Create(StrToFloat(String(PostTerm.front)))); //Zahlen auf tmp pushen
'x': tmp.push(TExtended.Create(xValue)); // Für X'e den aktuellen xValue pushen
else if tmp.getItemCount >= 2 //existieren genug Operanden, wende den Operator an
then begin
a := TExtended(tmp.top).Value;
tmp.pop;
b := TExtended(tmp.top).Value;
tmp.pop;
if String(PostTerm.front) = '+'
then tmp.push(TExtended.Create(Add(a,b)))
else if String(PostTerm.front) = '-'
then tmp.push(TExtended.Create(Sub(a,b)))
else if String(PostTerm.front) = '*'
then tmp.push(TExtended.Create(Mul(a,b)))
else if String(PostTerm.front) = '/'
then tmp.push(TExtended.Create(Dur(a,b)));
end;
end;
PostTerm.dequeue;
until PostTerm.getItemCount = 0;
result := TExtended(tmp.top).Value;
tmp.pop;
PostTerm := Term; //PostTerm wiederherstellen
end;
//Edit: Gelöst mittels FastMM4