Ich habe zwei verschiedene Ansätze zum Schreiben von Daten in eine XML-Datei bemerkt (die Fehlerbehandlung wurde aus Platzgründen weggelassen).
Bei der ersten Methode erstellen Sie das XML-Dokument und speichern das XML einfach in einer Datei:
%Vor%Bei der zweiten Methode erstellen Sie einen MemoryStream und speichern dann den MemoryStream in einer Datei:
%Vor%Ich vermute, die Logik für die Verwendung eines MemoryStream besteht darin, sicherzustellen, dass die XML-Datei erstellt werden kann, bevor versucht wird, die Datei zu speichern. Würde die MemoryStream-Methode ein Atomic-Write-Ereignis bereitstellen und / oder vor Schreibproblemen schützen, während Sie der XML-Datei Einträge hinzufügen?
Kann jemand erklären, ob dies tatsächlich notwendig ist oder nur eine übertriebene Möglichkeit, meinem Projekt unnötige Codezeilen hinzuzufügen?
Die MemoryStream
Version ist bei dieser Gelegenheit verschwenderisch. MemoryStream
ist nützlich, wenn Sie Stream
-ähnliche Arbeit ausführen möchten, aber keine tatsächliche Datei möchten. Wenn Sie eine Datei schreiben, schreiben Sie einfach in die Datei. Dies vermeidet die Notwendigkeit, alle Daten im Speicher zu puffern.
Das ist Overkill und eine Verschwendung.
Die beiden wichtigsten Ansätze basieren auf
Der erste erfordert die Erstellung eines In-Memory-Modells des Dokuments (für das das DOM-Modell entworfen wurde). Sobald Sie damit fertig sind, ist es einfach, direkt in den Dateistream zu schreiben.
Mit der zweiten Option sparen Sie viel Speicherplatz und Komplexität und verwenden einfach XmlWriter die direkt auf den Endstream verweisen können (in diesem Fall ein Dateistream).
In keinem Stadium ist es notwendig, einen MemoryStream zu verwenden
Wenn Sie (aus irgendeinem Grund) sicherstellen möchten, dass der XmlWriter erfolgreich ist (dh, die Datei wird möglicherweise abgeschnitten, aber in den meisten Fällen - wie bereits erwähnt - nicht durch das Schließen von Tags), können Sie einen temporären Dateistream verwenden. fx etwas ähnliches:
%Vor%Das verwendete wie:
%Vor%Dies wird nicht viel Speicher verbrauchen (natürlich macht es nur Sinn / macht mehr Sinn, wenn das resultierende XML groß ist)
Ich denke, dass die Verwendung eines Speicherstreams nützlich wäre, wenn das Dokument in einer Web-App oder einem Web-Service erstellt wird. Der Speicherort der Datei kann zu einem Konflikt mit einem anderen Prozess führen, der dieselbe Verarbeitung ausführen könnte, was zu ungültigen Ergebnissen führen kann. In einem Speicher-Stream sollte die Verarbeitung getrennt sein.
Sie müssen keinen MemoryStream verwenden, um den XmlWriter zu verwenden. Der XmlWriter kann direkt in eine Datei schreiben; Sie können eine andere Überladung der XmlWriter.Create-Methode verwenden, die einen Dateinamen als Argument verwendet, oder statt in einen MemoryStream zu schreiben, könnten Sie auch in einen XmlTextWriter oder einen FileStream schreiben.
Also könnten Sie Ihren zweiten Code-Code schreiben als:
%Vor%AFAIK, der XmlWriter schützt Sie nicht vor dem Erstellen eines nicht gut gemachten Xml.
Tags und Links c# xml memorystream