Hallo,
Ich hab ein allgemeines Problem zum Ablauf meines c# Programms. Suche eine saubere Lösung.
Ich weiß nicht, ob der Beitrag hier passt, aber ich weiß nicht wo sonst hin damit.
und zwar gehts um folgendes:
Ich habe eine ganze Menge von xxx-Dateien (Dateien eines Dokumentenmanagementsystems) in einem Array.
die Dateien sollen exportiert werden,also wieder zu derer ursprünglichen Datei werden. Also aus .xxxz.bsp zu .pdf.
Dann sollen die Indexdaten dieses xxx Dokuments in ein Xml geschrieben werden. Dann soll ein Datenbankflag done gesetzt werden für dieses Dokument.
also für jedes doc:
1)exportieren
2)indexdaten ins xml
3)done flag setzen
Das Problem dabei ist, dass das 120 000 000 Dokumente sind und dass das Ganze 100% konsistent sein sollte.
Also wenn 1) dann auch 2) und 3).
Oder wenn Fehler bei 3, dann 1 und 2 rückgängig usw. quasi wie bei einer DB- Transaktion, ganz oder gar nicht.
Probleme gibts immer bei Punkt 2, 1 und 3 alleine laufen tadellos, auch bei großen Dokumentblöcken.
Daher dachte ich mir, ich nehm jedes Dok einzeln her. Dafür muss ich aber jedesmal das Xml aufmachen und einen Xml Node für das jeweilige Dokument (Indexdaten) hinzufügen.
Dann done flag. So hab ich die Konsistenz halbwegs im Griff, denn wenn Fehler brauch ich nicht viel rückgängig machen und das Programm bricht ab.
Nur ist das ein Wahnsinn, weil das Aufmachen des Xml irrsinnige Ressourcen braucht.
Zumindest bekomm ich schon nach dem 300. Dokument Speicherfehler.
(es wird versucht im geschützten Speicher zu lesen oder zu schreiben.....).
Außerdem dauerts ja auch viel länger, denk ich?!
Die lösung ist wahrscheinlich dumm, oder?
Soll ich doch lieber einen Block Dokumente exportieren, dann auf einmal ins Xml und dann ein Flag setzen?
Hab ich auch probiert, da kommt er bis zum 500. Dokument. Exportieren tut er alles richtig, nur das Xml ist kaputt nach dem 300 Dokument, da kann er irgendwelche Nodes nicht schließen etc. offensichtlich auch ein Problem mit dem Arbeitsspeicher. Und dann hab ich den Salat, weil dann kann ich alles rückgängig machen.
Welche Methode ist besser, oder wie könnte man das besser lösen? Bin ich am Hohlweg? Geibt es einen besseren Weg?
Wie handhabt man sowas grundsätzlich mit sovielen Datenmengen?
bin über jeglichen tip sehr dankbar,
lg Katrin
Ich hab ein allgemeines Problem zum Ablauf meines c# Programms. Suche eine saubere Lösung.
Ich weiß nicht, ob der Beitrag hier passt, aber ich weiß nicht wo sonst hin damit.
und zwar gehts um folgendes:
Ich habe eine ganze Menge von xxx-Dateien (Dateien eines Dokumentenmanagementsystems) in einem Array.
die Dateien sollen exportiert werden,also wieder zu derer ursprünglichen Datei werden. Also aus .xxxz.bsp zu .pdf.
Dann sollen die Indexdaten dieses xxx Dokuments in ein Xml geschrieben werden. Dann soll ein Datenbankflag done gesetzt werden für dieses Dokument.
also für jedes doc:
1)exportieren
2)indexdaten ins xml
3)done flag setzen
Das Problem dabei ist, dass das 120 000 000 Dokumente sind und dass das Ganze 100% konsistent sein sollte.
Also wenn 1) dann auch 2) und 3).
Oder wenn Fehler bei 3, dann 1 und 2 rückgängig usw. quasi wie bei einer DB- Transaktion, ganz oder gar nicht.
Probleme gibts immer bei Punkt 2, 1 und 3 alleine laufen tadellos, auch bei großen Dokumentblöcken.
Daher dachte ich mir, ich nehm jedes Dok einzeln her. Dafür muss ich aber jedesmal das Xml aufmachen und einen Xml Node für das jeweilige Dokument (Indexdaten) hinzufügen.
Dann done flag. So hab ich die Konsistenz halbwegs im Griff, denn wenn Fehler brauch ich nicht viel rückgängig machen und das Programm bricht ab.
Nur ist das ein Wahnsinn, weil das Aufmachen des Xml irrsinnige Ressourcen braucht.
Zumindest bekomm ich schon nach dem 300. Dokument Speicherfehler.
(es wird versucht im geschützten Speicher zu lesen oder zu schreiben.....).
Außerdem dauerts ja auch viel länger, denk ich?!
Die lösung ist wahrscheinlich dumm, oder?
Soll ich doch lieber einen Block Dokumente exportieren, dann auf einmal ins Xml und dann ein Flag setzen?
Hab ich auch probiert, da kommt er bis zum 500. Dokument. Exportieren tut er alles richtig, nur das Xml ist kaputt nach dem 300 Dokument, da kann er irgendwelche Nodes nicht schließen etc. offensichtlich auch ein Problem mit dem Arbeitsspeicher. Und dann hab ich den Salat, weil dann kann ich alles rückgängig machen.
Welche Methode ist besser, oder wie könnte man das besser lösen? Bin ich am Hohlweg? Geibt es einen besseren Weg?
Wie handhabt man sowas grundsätzlich mit sovielen Datenmengen?
bin über jeglichen tip sehr dankbar,
lg Katrin
Comment