Frage

Ich brauche wie möglich ein Wörterbuch in einer Datei so schnell zu speichern. Beide Schlüssel und Wert sind Objekte und können nicht garantiert als Serializable markiert werden. Ich ziehe es auch ein Verfahren schneller als Tausende von Objekten serialisiert. Also habe ich in Mapped Speicherdateien Unterstützung in .NET sah 4. Allerdings scheint es MemoryMappedViewAccessor erlaubt nur Speicherung von Strukturen und nicht die Referenztypen.

Gibt es eine Möglichkeit, den Speicher durch einen Bezug Typen einer Datei und zum Rekonstruieren des Objekts aus diesem blob des verwendeten Speichers zu speichern (ohne Serialisierung binärer)?

War es hilfreich?

Lösung

Memory Mapped-Dateien mit dem Garbage Collector grundsätzlich unvereinbar sind. Deshalb ist es so lange gedauert hat, eine solche Hauptbetriebssystem-Funktion von .NET unterstützt zu erhalten. Referenztypen müssen die MMF Ansicht serialisiert werden, MemoryMappedViewStream, kein Weg dran vorbei. Eine ähnliche Einschränkung besteht in nicht verwalteten Code, Objekte mit Zeigern abgeflacht werden müssen, damit die Spitz auf Objekte in der Ansicht als gut sichtbar sind.

Ob Sie sie auf einen MMF oder in eine Datei serialisiert werden keinen Unterschied machen, der Dateisystem-Cache als auch mit MMFs umgesetzt. Datei schreibt sind sehr schnell, solange die geschriebenen Daten passt in verfügbar mappable Speicher. bei einem Wenn das dann ein Problem, 64-Bit-Betriebssystem aussehen, dieses Problem zu lösen.

Andere Tipps

Ich glaube, dass ein Klecks Speicher einfach nicht praktikabel ist, weil das Gedächtnis, wenn es Referenztypen hat, werden Verweise auf andere Speicherblöcke, die beim nächsten Mal die Datei wahrscheinlich nicht zugegriffen gelten. Deshalb binäre Serialisierung vorhanden ist: diese Art von Referenzen zu halten. Wenn Sie wirklich eine strenge Kontrolle wollen, obwohl, würde ich System.IO.BinaryWriter und Binary nutzen die volle Kontrolle über genau das, was in welcher Reihenfolge in die Datei geschrieben wird, während Overhead minimiert wird.

Dies ist die Art von Szenario, dass binäre Serialisierung entworfen wurde. Gibt es einen bestimmten Grund, warum Sie nicht möchten, dass benutzen? Haben Sie sichergestellt, dass es ‚zu langsam‘? Natürlich können Sie Ihre eigenen Serializer-Code und wahrscheinlich machen es effizienter für Ihr spezielles Szenario, aber dann werden Sie es vorwärts gehen halten müssen. Ist es die Mühe wert?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top