folgende Situation:
in einem Ordner sind mehrere XML Files (>20Stück, Größe ca.: 6MB) aus diesen muss ich verschiedene Werte extrahieren.
Das habe ich über xpathDocument und Xpathnavigator versucht zu realisieren.
Grundsätzlich funktioniert es bei bis zu 14 Dateien im Ordner. Bei mehr hängt sich das Programm im Navigieren im XML File auf.
Frage: nachdem die xml Files ja immer als neue Instanz des xpathDocuments geladen werden ( jedenfalls bei mir im Code) läuft mir da der Speicher voll oder was könnte dieses Phänomen verursachen?
Danke
Gruß
Verwendetes Datenbanksystem: <bitte immer angeben>
Nieman kennt oder sieht deinen Code, wie soll man dir da sagen was die Ursache ist?
Glaskugeln haben dabei auch noch nicht den erwarteten Durchbruch erreicht.
Bitte poste mal deinen Code, der das Problem verursacht.
Eigentlich sollte sich sowas ohne große Probleme auch durch debuggen finden lassen.
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Kein wunder, dass du hängen bleibst.
Du hast dort zwei verschachtelte do...while Schleifen.
Dort kann es u.U. vorkommen, dass n nicht hochgezählt wird.
In dem Fall hängst du in einer Endlos Schleife fest.
Den Code selbst solltest du aber dringend auslagern.
Davon ist nichts testbar.
Auch gehören eigene Klassen am besten in eine eigene .cs Datei
Für das auslesen der XML Dateien würde ich mir eine eigene Xml Parser Klasse bauen.
Intern kannst du dort dann auch mit xPath arbeiten, was das ganze Schleifen verschachteln im einfachsten Fall auf einfache foreach Schleifen runterbricht.
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Danke für die Antwort, nur zu meinem Verständnis, wenn ich mehr wie ca.:14 von den XML Files im Ordner habe kann die Verschachtelung der Do While Schleifen den Effekt haben das eine der schleifen n nicht mehr hochzählt?
do
{
// ...
if (text == "Displacement")
{
// ...
break;
}
} while (n<11);
zählt n nicht hoch und die break-Anweisung verläßt die Schleife ja nur, wenn der passende Text gefunden wurde, d.h. andernfalls hast du eine Endlosschleife!
Ich habe so den Verdacht das die XML Dateien leicht unterschiedlich aufgebaut sind und manchmal Werte vorkommen und manchmal halt nicht. Ich denke der Fehler auch schon ab einer Datei auftauchen wird und zwar dann, wenn es kein "Displacement" Wert in der XML Datei gibt. Hast du mal jede XML Datei einzeln geprüft und eingelesen?
Bei den XML Daten handelt es sich um Prüfprotokolle eines AOI Systems.
Die können sich in den Values der Attribute unterscheiden (Anzahl der Kommastellen) aber vom Strukturellen Aufbau sind die alle gleich.
Den Eintrag Displacement gibt es sicher bei jedem gesuchtem Bauteil.
deswegen auch keine Abfrage ob der Eintrag überhaupt vorhanden ist.
Dann hast du vielleicht auch folgendes Problem.
Du springst nur bei dem Code Block in die if Anweisung.
if (navigator.GetAttribute("Name","")==diode)
Dann du aber nicht oft genug dort reinspringen kannst, hängst du in der do..while Schleife.
Bau den Code so um, dass du keine while Schleifen brauchst.
Im Idealfall solltest du mit XPath einfach durch die Nodes laufen können.
Der Navigator scheint mir hier auch ziemlich umständlich zu sein.
Kannst du nicht ggf. per Deserialisierung die Daten auslesen?
Dann müsstest du nicht mal das Xml direkt parsen müssen.
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Bin Problemorientierter SW Bastler, d.h. wenn ein Problem da ist setz ich mich hin und versuche das zu lösen. Dann ist wieder nix mehr mit Programmieren, was zur folge hat das ich immer wieder bei " wie ging die foreach schleife nochmal?" anfange.
Jetzt die Frage : Deserialisierung? interpretiere ich das richtig, wenn ich annehme das da das XML Konstruckt in einen Text umgewandelt werden kann und ich mit den ganzen String Methoden arbeiten kann?
Wäre meinem Level entgegenkommend.
aber mal noch ne frage: für die XpathDokument Klasse hab ich nur Konstruktoren gefunden, meine mich dunkel an Destruktoren zu erinnern die halt eine erstellte Instanz der Klasse wieder eliminieren.
Gibt so was für die Klasse?
Danke
P.S. Alles nur noch wegen des Lernens, hab angefangen einen XML Parser zu bauen.
Mit Deserialisierung ist gemeint, dass z.B. das XML direkt zu Instanzen von Klassen umgewandelt wird.
Dafür gibt es entsprechende Klasse in .NET um dies einfach umzusetzen.
Dies spart das manuelle parsen, braucht aber etwas Know How ist im .NET Bereich aber gut dokumentiert.
Destruktoren spielen hier keine große Rolle.
In .NET gibt es dafür zum einen das Dispose Pattern über IDisposable und den Finalizer.
Das sind aber Dinge, in die du dich mal einlesen solltest.
Hat aber mit dem Problem nicht viel zu tun.
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.