Thema: Delphi IXMLdocument Memoryleak

Einzelnen Beitrag anzeigen

Sequitar

Registriert seit: 8. Jan 2016
74 Beiträge
 
Delphi 10.4 Sydney
 
#1

IXMLdocument Memoryleak

  Alt 4. Nov 2016, 14:24
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.
  Mit Zitat antworten Zitat