Entwickler-Ecke

Dateizugriff - XML und die Geschwindigkeit


gala - Do 15.05.03 13:29
Titel: XML und die Geschwindigkeit
Hallo Leute,

ich habe eine kleine Methode geschrieben, wo ich die XML-Datei auslese. Zuerst habe ich mit kleineren Dateien probiert und es ging sehr schnell. Jetzt verwende ich 7 MB-datei und was ist passiert?! Mein Gott, um ein einzelner Eitrag zu lesen, braucht mann mehrere Minuten. Ich verstehe das nicht. Ist das wegen Delphi, oder vielleicht XML? Oder mache ich irgendwas falsch?

Hier ist die Code:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Button1Click(Sender: TObject);
 var
 myFirstXML : IXMLDocument;
 i,j : Integer;
  f: TextFile;
  g: String;
begin
myFirstXML := newXMLDocument;
myFirstXML.LoadFromFile('D:/input_mainplan.xml');
AssignFile(f, 'C:/test.txt');
    Append(f);
    for i := 0 to myFirstXML.DocumentElement.ChildNodes.Count -1 do
     for j := 0 to myFirstXML.DocumentElement.ChildNodes[i].ChildNodes.Count -1 do
     Writeln(f, myFirstXML.DocumentElement.ChildNodes[i].ChildNodes[j].Attributes['KO_NAME']);
    Flush(f);
    CloseFile(f);
end;



Danke im Voraus

gala


Moderiert von user profile icontommie-lie: Delphi-Tags hinzugefügt


MSCH - Do 15.05.03 18:48

Hi,
XML hat einen Nachteil, da es von hause aus nicht "indiziert" ist, also quasi sequentiell aufgebaut ist (siehe deine For-Schleifen), muss die gesamte Datei geparst und "abgerannt" werden. Noch schlimmer wirds, wenn eine DTD oder Schema definiert ist.

IMHO gehts nur, wenn die Kiste gut ausgestattet ist (>n GHz, Many moore RAM)

grez.
msch


Delete - Do 15.05.03 19:40

Beim MS-XML-Parser gibt es die Möglichkeit, alle Nodes, die z.B. über das gesuchte Attribut "KO_NAME" verfügen in eine so genannte NodeList einlesen zu lassen. Diese Liste lässt sich dann mit einer for-Schleife durchgehen und z.B. in eine Textdatei übertragen.

Ich habe es nicht getestet, aber ich könnte mir vorstellen, dass der Schreibzugriff auf die Textdatei schneller geht, wenn der Parser selbst vorher die Knoten aussortiert.

Mal ausprobieren!

Grüße.