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.
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.
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.
Tags und Links .net c# memorystream