Hallo, ich versuche gerade, Daten über das
XML-format auszutauschen (der Inhalt sei hier unberücksichtigt). Habe bei der erstellung eines
XML documents über das IXML interface jedoch ein memoryleak. Wie kann ich das umgehen / eheben?
Ich ging davon aus dass die Nutzung des IXMLDocument interface automatisch reference counted ist und somit keine manuelle freigabe des dahinterliegenden TXMLDocuments nötig ist?
Delphi-Quellcode:
Procedure ClearXMLnode(
Var Node: Ixmlnode);
Var
Temp: Ixmlnode;
I, Count: Integer;
Begin
Count := Node.ChildNodes.Count;
I := 0;
While I < Count
Do
Begin
Temp := Node.ChildNodes[I];
ClearXMLnode(Temp);
// temp:=nil;
Inc(I);
End;
Node :=
Nil;
End;
Procedure Run_test(Sender: TObject);
Var
Xml: Ixmldocument;
Root, Node: Ixmlnode;
Begin
// With Ttester.Create Do
Begin
// Test_leakProc( // custom memory leak tester
// Procedure
Begin
Xml := Newxmldocument;
Assert(
Xml.Active);
Root :=
Xml.AddChild('
XML');
Node := Root.AddChild('
firstentry');
Root.ChildNodes[0].AddChild('
aaa');
Root.ChildNodes[0].AddChild('
bb');
// clear document
ClearXMLnode(Root);
Node :=
Nil;
Xml.Active := False;
Xml :=
Nil;
End
// , 0);
// Writereport(Memo1); // custom output of memoryleaks if detected
// Free;
End;
End;
Auch wenn bei //do something kein weiterer code ausgeführt wird stelle ich ein memoryleak fest... relativ klein (28 b), aber bei mehrfacher verwendung / langlaufender application (service) würde ich das gerne vermeiden.