AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

IXMLDOMDocument Speicher

Ein Thema von win568 · begonnen am 18. Sep 2013 · letzter Beitrag vom 19. Sep 2013
Antwort Antwort
Seite 1 von 2  1 2      
win568

Registriert seit: 8. Sep 2008
134 Beiträge
 
#1

IXMLDOMDocument Speicher

  Alt 18. Sep 2013, 15:24
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:
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;
Nach dem Nil setzen, sollte der belegte Speicher ja wieder freigegeben werden. Aber nix tut sich.
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: IXMLDOMDocument Speicher

  Alt 18. Sep 2013, 15:35
Normalerweise werden Klassen in Delphi, die mit Klasse.Create aufgerufen wurden mit Klasse.Free oder FreeAndNil(Klasse) wieder freigegeben.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
win568

Registriert seit: 8. Sep 2008
134 Beiträge
 
#3

AW: IXMLDOMDocument Speicher

  Alt 18. Sep 2013, 15:37
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.
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: IXMLDOMDocument Speicher

  Alt 18. Sep 2013, 15:46
Hilft das weiter?

temporäre Interfaces sofort freigeben?
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)

Geändert von baumina (18. Sep 2013 um 15:49 Uhr)
  Mit Zitat antworten Zitat
win568

Registriert seit: 8. Sep 2008
134 Beiträge
 
#5

AW: IXMLDOMDocument Speicher

  Alt 18. Sep 2013, 15:53
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.
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: IXMLDOMDocument Speicher

  Alt 18. Sep 2013, 16:12
Mal interessehalber : Womit überwachst du den Speicher?
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
win568

Registriert seit: 8. Sep 2008
134 Beiträge
 
#7

AW: IXMLDOMDocument Speicher

  Alt 18. Sep 2013, 16:13
ProcessExplorer
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: IXMLDOMDocument Speicher

  Alt 18. Sep 2013, 16:17
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
win568

Registriert seit: 8. Sep 2008
134 Beiträge
 
#9

AW: IXMLDOMDocument Speicher

  Alt 18. Sep 2013, 16:19
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.
  Mit Zitat antworten Zitat
Insider2004
(Gast)

n/a Beiträge
 
#10

AW: IXMLDOMDocument Speicher

  Alt 18. Sep 2013, 23:34
Nimm doch den ADOM.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz