MemoryStream vs ein Array von Bytes

8

Während ich einen MemoryStream benutze, finde ich häufig Daten in einem temporären Array von Bytes (also dupliziere).

Ich denke, es ist ein wenig Verschwendung von Ressourcen, weil MemoryStream Sie nicht direkt auf das zugrunde liegende Byte-Array zugreifen lässt.

Was ist der wahre Vorteil eines MemoryStreams in dieser Situation? Ich habe irgendwo gelesen, dass es sich wie eine Memory-Mapped-Datei verhält. Daten werden nur beim Zugriff von der Festplatte mitgenommen und verbrauchen weniger Speicher.

Stimmt das? Ich denke nicht. Vielleicht ist es für einen FileStream der Fall?

Danke für Ihre Klarstellung.

    
Jeff Moser 12.06.2009, 17:21
quelle

2 Antworten

4

Für mich ist der Hauptvorteil eines Speicherstroms, dass er dynamisch wächst und dafür optimiert ist. Es ist ein Schmerz, es kopieren und Speicher duplizieren zu müssen, aber wenn Sie es hauptsächlich verwenden, um einen Puffer zu konstruieren, der am Ende des Prozesses übergeben wird, wird dieser Fehler etwas amortisiert.

Ich sollte hinzufügen, im Gegensatz zu einem FileStream, MemoryStreams sind viel, viel schneller. Sie sind begrenzter als FileStreams, weil Sie im Allgemeinen erheblich mehr Speicherplatz als RAM haben. Sie müssen also entscheiden, ob Sie Geschwindigkeit oder Platz benötigen.

    
Christopher 12.06.2009 17:25
quelle
3

Sie können den zugrunde liegenden Byte-Puffer mit der Funktion getBuffer abrufen (aber nur, wenn Sie den MemoryStream aus einem von Ihnen bereitgestellten Byte-Array erstellt haben, was nützlich ist, wenn Sie den Puffer direkt bearbeiten möchten)

Der einzige Vorteil bei der Verwendung eines MemoryStream ist, wenn Sie eine API verwenden, die auf Streams basiert, oder wenn Sie den Byte-Puffer benötigen, um dynamisch wachsen zu können.

    
Mike Dinescu 12.06.2009 17:27
quelle

Tags und Links