TXMLDocument Speicherverbrauch minimieren



  • Hallo,

    ich habe ein Programm geschrieben, welches mit Hilfe von TXMLDocument Daten in eine XML Datei schreibt. Logischer Weise besteht diese aus mehreren Nodes bzw NodeListen. Mein Problem ist nun folgendes:

    Ich öffne eine bestehende XML- Datei und navigiere durch diese, indem ich die von mir erstellten folgenden Methoden nutze. Wenn ich jedoch mit NodeListDown zu einer unterliegenden NodeList wechsele, dann bleibt die obere weiterhin im Speicher, was bei großen NodeLists schnell zu einem hohen Speicherverbrauch führt.

    Wie kann ich es erreichen, dass ich z.B. in der Methode NodeListDown die NodeList freigebe, die ich nicht mehr brauche?
    Oder gibt es für Borland 2010 eine bessere Möglichkeit durch eine Xml- Datei zu navigieren?

    bool __fastcall DrXml::FindNode(AnsiString Name)
    {
    	if(NodeList->FindNode(Name))
    	{
    		Node = NodeList->FindNode(Name);
    		index = NodeList->IndexOf(Node);
    
    		return true;
    	}
    	else
    		return false;
    }
    
    bool __fastcall DrXml::NodeListUp()
    {
    	if(Node->GetChildNodes())
    	{
    		NodeList = Node->GetChildNodes();
    		level++;
    		index=-1;
    
    		GetNextNode();
    
    		return true;
    	}
    	else
    		return false;
    }
    
    bool __fastcall DrXml::NodeListDown()
    {
    	if(level>=1)
    	{
    		Node = Node->GetParentNode();
    
    		AnsiString tmp=Node->GetNodeName();
    
    		NodeList = (Node->GetParentNode()) ->GetChildNodes();
    
    		index=NodeList->IndexOf(tmp);
    
    		level--;
    
    		return true;
    	}
    	else
    		return false;
    }
    


  • Naja, ich denke nicht, dass man noch mehr rausholen könnte aus dem Code, denn die Zeiger und andere Variabeln haste ja nur global deklariert. Und diese werden immer wieder verwendet, also kein erneutes Initialisieren. Man könnte versuchen das AnsiString tmp als static zu deklarieren, aber ob das noch viel bringt?


Anmelden zum Antworten