2009-06-09 15 views
0

Ich habe eine VS 2005-Anwendung mit C++. Es importiert im Grunde ein großes XML von etwa 9 GB in die Anwendung. Nach der Ausführung für mehr als 18 Stunden gab es eine Ausnahme 0xc0000006 In Seitenfehler. Der virtuelle Speicherverbrauch beträgt 2,6 GB (ich habe die 3 GB festgelegt).Seite Fehler 0xc0000006 mit VC++

Hat jemand eine Ahnung, was diesen Fehler verursacht und was die Lösung sein könnte

+0

Okay - Entschuldigung für die Verzögerung bei der Rückkehr zu Ihnen. Wie liest du diese Datei ein? – ChrisBD

+0

Wenn Sie ein SAX-Ereignis haben, was machen Sie dann mit den Daten, die es Ihnen gibt? Es klingt wie du ein Speicherleck hast. –

+0

möchten Sie möglicherweise Antworten auf einige Ihrer Fragen akzeptieren; das würde andere ermutigen, dir dabei zu helfen. – CesarGon

Antwort

0

9GB übermäßig groß scheint in zu lesen. Ich würde sagen, dass auch 3Gb in einem Rutsch zu groß ist.

Ist Ihr Betriebssystem 64bit?

Wie hoch ist die maximale Auslagerungsdateigröße?

Wie viel RAM haben Sie?

Haben Sie dies im Debug- oder Release-Modus ausgeführt?

Ich würde vorschlagen, dass Sie versuchen, das XML in kleineren Brocken zu lesen.

Warum versuchen Sie, eine solche große Datei auf einmal zu lesen?

Ich würde mir vorstellen, dass Ihre Anwendung so lange dauerte, bevor sie fehlschlug, als sie anfing, die Datei in den virtuellen Speicher zu kopieren, was im Grunde eine große Datei auf der Festplatte ist. Daher liest das Betriebssystem die XML-Datei von der Festplatte und schreibt sie auf einen anderen Festplattenbereich zurück.

** Bearbeiten - hinzugefügt Text **

Nachdem hatte einen kurzen Blick auf Expat XML-Parser es so aussieht, wenn Sie mit Stapel oder ein Ereignis in Probleme laufen sind Handhabung, die meisten wahrscheinlich, dass Sie zu viel hinzufügen zum Stapel.

Benötigen Sie wirklich 3 GB Daten auf dem Stack? Bei einer Schätzung würde ich sagen, dass Sie versuchen, eine XML-Datenbank-Datei zu verarbeiten, aber ich kann mir nicht vorstellen, dass Sie eine so große Tabellenzeile haben.

Ich denke, dass Sie es wirklich verwenden sollten, um nach Schlüsselbereichen zu suchen und zu verwerfen, was nicht gewollt ist.

Ich weiß nichts anderes als was ich gerade über Expat XML Parser gelesen habe, würde aber vorschlagen, dass Sie es nicht auf die effizienteste Weise verwenden.

+0

Mein Betriebssystem ist 32 Bit. Ich habe einen 2 GB Ram (Ich habe die 3 GB Flag gesetzt) ​​ Ich führe den Code im Freigabemodus. Ich verwende Expat-Parser, der dem SAX-Parser sehr ähnlich ist –

0

Anstatt die gesamte Datei in den Speicher zu laden, können Sie SAX Parser verwenden, um nur einen Teil der Datei in den Speicher zu laden.