![]() |
IXMLDOMDocument Speicher
Hallo Leute
Ich habe folgendes Problem: Wenn ich per IXMLDOMDocument neue Knoten anfüge und diese dann in einer Datei speichere, wird der belegte Speicher nach Nil setzen des Dokumentes nicht wieder freigegeben. Das ganze passiert zwar mit einer eigenen Klasse, aber selbst mit folgender Implementation funkt es nicht:
Code:
Nach dem Nil setzen, sollte der belegte Speicher ja wieder freigegeben werden. Aber nix tut sich.
procedure TestXML;
var lDoc: IXMLDOMDocument; lRootNode, lNode: IXMLDOMNode; i: Integer; begin lDoc := CoDOMDocument60.Create; try lRootNode := lDoc.createElement('Root'); lDoc.appendChild(lRootNode); for i := 0 to 1000000 do begin lNode := lDoc.createElement('Child' + IntToStr(i)); lNode.text := 'Childknoten ' + IntToStr(i); lRootNode.appendChild(lNode); end; lDoc.save('D:\Test.xml'); finally lDoc := nil; end; end; |
AW: IXMLDOMDocument Speicher
Normalerweise werden Klassen in Delphi, die mit Klasse.Create aufgerufen wurden mit Klasse.Free oder FreeAndNil(Klasse) wieder freigegeben.
|
AW: IXMLDOMDocument Speicher
Hi
Dies ist normalerweise richtig. Nur handelt es sich hier nicht um eine Delphi Klasse sondern um ein IXMLDOMDocument Interface, das mit CoDOMDocument60 erzeugt wird. Wenn dieses auf Nil gesetzt wird, wird per _Release automatisch der Speicher freigegeben. |
AW: IXMLDOMDocument Speicher
|
AW: IXMLDOMDocument Speicher
Hi Baumina
Danke für den Beitrag. Leider erklärt er nicht das Verhalten. IXMLDOMDocument verhält sich anders als IXMLDocument. Der beim Laden oder Befüllen des Dokumentes assoziierte Speicher wird leider nicht freigegebenen. Unverständlicherweise kann man die oben beschriebene Routine mehrfach hintereinander ausführen, ohne das mehr Speicher benötigt wird. Anscheinend checkt das das IXMLDOMDocument und verwendet den bereits reservierten Speicher. Dieses Verhalten ist aber bei uns problematisch, da dies nur für das IXMLDOMDocument gilt. Delphi kann auf den Speicher nicht mehr zugreifen -> Problem für die weitere Verarbeitung. |
AW: IXMLDOMDocument Speicher
Mal interessehalber : Womit überwachst du den Speicher?
|
AW: IXMLDOMDocument Speicher
ProcessExplorer
|
AW: IXMLDOMDocument Speicher
IXMLDOMDocument ist doch das Interface des MS-Parsers. Da wirst du nich viel machen können als auf einen nativen Delphi XML-Parser zu wechseln. Das was der MS-Parser im Speicher hält ist außerhalb des Delphi-Speichermanagers.
|
AW: IXMLDOMDocument Speicher
Gibt es keine Möglichkeit nach dem Beenden das Auszuleeren. Mein Problem ist ja, das der Speicher, da es sich um einen INPROC Prozess handelt meinem Programm abgeht.
Das Ausweichen auf eine andere Komponente funkt leider nicht, da wir auch Transformationen vornehmen. |
AW: IXMLDOMDocument Speicher
Nimm doch den ADOM.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz