C# Geschwindigkeit FileStream/MemoryStream bei vielen Schreib-/Lesezugriffen

AP Nova

Commander
Registriert
Juni 2008
Beiträge
2.256
Da ich gerade ein Programm erstelle, bei dem ich unter Umständen sehr viele (vielleicht vorerst vier- bis fünfstellige) Schreib- bzw. beim Einlesen einer Datei Lesezugriffe habe, stellt sich mir die Frage, was die bessere Lösung wäre:
-Über einen ByteWriter/-Reader und FileStream die Datei direkt Stück für Stück zu schreiben und lesen
-Beim Schreiben erst alles über einen ByteWriter in einen MemoryStream schreiben, dann den MemoryStream über WriteTo in einen FileStream schreiben und beim Lesen eben erst den Inhalt des FileStreams in einen MemoryStream schreiben und von dort aus auswerten

Vom Gefühl her würde ich sagen, dass die Zugriffe auf den MemoryStream wesentlich schneller wären, allerdings weiß ich nicht, inwiefern Schreibzugriffe auf eine Datei nicht zusammengefasst werden und so vielleicht aus (beispielsweise) tausend geschriebenen Integer-Werten doch nur ein Zugriff wird, wenn das wirklich direkt hintereinander geschrieben wird. Umgekehrt weiß ich nicht, ob diese unzähligen Lesezugriffe nicht vielleicht sowieso im Areitsspeicher landen würden, weil die Datei dort vielleicht so oder so zwischengespeichert wird.

Also: Was ist schneller, sehr viele Schreib-/Lesezugriffe auf eine Datei direkt oder das ganze über einen MemoryStream laufen zu lassen?

(Die Datenstücke sind tendenziell eher klein, hauptsächlich Integer-Werte und ein paar kurze Strings, sprich insgesamt würde sich die Dateigröße selbst bei größeren Dateien nur auf wenige MB belaufen)

Danke für eure Hilfe
 
In dem Fall geht probieren über studieren. Nimm aber auf jedenfall starke Lastzustände des Systems zum Test.
 
FileStreams werden automatisch gepuffert. Insofern hat ein direktes Schreiben keine Auswirkung, da nur der Puffer vollläuft.
 
Danke für die Antworten bisher. Solange das Programm nicht fertig ist und ich die entsprechenden Dateien nicht überhaupt erstmal erstellt habe, kann ich nicht ohne weiteren Aufwand testen, was schneller läuft. Im Moment gehe ich über die Variante mit dem MemoryStream zwischendrin. Sollte mir das zu langsam gehen, kann ich ja mal testen, wie sich die direkte Variante im Vergleich schlägt, wenn ich die entsprechenden Dateien für einen Test habe.
 
Zurück
Oben