Gibt es eine Open Source-MemoryStream-Implementierung, die keinen zusammenhängenden Speicher verwendet?

8

Wie GuyFawkes möchte ich MemoryStream verwenden, um ein großes zu speichern Datenmenge, aber immer noch die Ausnahmen 'nicht genügend Arbeitsspeicher'.
TomToms Antwort ist, was ich gerne tun würde - benutze eine Implementierung, die keinen zusammenhängenden Block benötigt - aber ich frage mich, ob es bereits eine freie Implementierung gibt, um mir zu helfen, selbst eine zu schreiben?

Kennt jemand eine gute, kostenlose Re-Implementierung von MemoryStream, die mit großen Streams arbeiten kann?

BEARBEITEN:

Die MemoryMappedFile-Lösung ist sehr interessant, und ich werde sie mir für andere Projekte merken, aber wie Henk sagt, es bewegt sich zu weit von der Abstraktion, auf die MemoryStream abzielt. Insbesondere die Anforderung einer bekannten Kapazität.
Die Daten, mit denen die Ersetzung umgehen soll, sind in einigen Fällen sehr groß, in anderen jedoch relativ klein (und wir wissen nicht, welche es sein wird, bis es zu spät ist;)); Außerdem werden viele Instanzen der Klasse gleichzeitig existieren. Letztendlich würde die Arbeit, die erforderlich ist, um MemoryMappedFiles zu verwenden (um eine angemessene Größe für jeden einzelnen zu bestimmen), der Implementierung der TomTom-Lösung entsprechen.

    
sebf 14.03.2012, 16:35
quelle

3 Antworten

3

Hier ist meine Implementierung für den Fall, dass jemand es braucht; Ich werde diese Frage für eine Weile offen lassen, falls jemand noch etwas Besseres erwidert.

Ссылка

    
sebf 18.03.2012, 11:45
quelle
1

Sie erstellen eine MemoryMappedFile ohne eine Datei, dh eine Datei das lebt im Systemspeicher.  Die Option DelayAllocatePages verzögert die Zuweisung, bis der Speicher tatsächlich benötigt wird. Sie müssen jedoch im Voraus eine maximale Kapazität angeben. Verwenden Sie die CreateViewStream-Methode , um einen Stream zu erstellen.

    
dtb 14.03.2012 16:43
quelle
0

Nicht genau eine Neuimplementierung von MemoryStream, aber überlegen Sie, ob Sie eine speicherbezogene Datei für Ihre Anforderung.

Memory Mapped Files kann viele der Probleme lösen, die große Speicherpuffer lösen können, sind sehr effizient und werden direkt von .NET unterstützt.

    
Eric J. 14.03.2012 16:42
quelle

Tags und Links