Frage

Ich habe ein Projekt, das ein ziemlich kompliziertes, verschachteltes Objekt (Klasse) enthält (Referenzen, die die referenzierten Objekte nach oben und unten aufrufen), das in einem Wörterbuch gespeichert ist, wie z

public static Dictionary<string, Object1> DObject { get; set; }

Objekt1 ist eine komplizierte Klasse. Es ist nicht wie eine "Adressbuch" - oder "Personeninfo" -Klasse. Die Klasse selbst verfügt über Arrays, Wörterbücher eines anderen Objekts. Diese Objektreferenzklassen darüber usw.

Da die Größe des DObjects 1 GB + im Speicher betragen kann, werde ich es mit BinaryFormatter in eine Datei serialisieren. Da ich dieses Objekt laden muss, habe ich überlegt, MemoryMappedFile zu verwenden. Dem Wörterbuch können neue Schlüssel und Werte hinzugefügt werden. Objekte enthalten möglicherweise mehr Daten (hinzugefügt / aktualisiert) usw. Ändert der MMF die Größe? Wie greife ich auf einen bestimmten Schlüssel im DObject in der Speicherzuordnungsdatei zu? Gibt es einen Suchmechanismus wie eine Hashtabelle im Speicher, damit ich einen bestimmten Schlüssel wie ein Wörterbuch finden und seinen Wert ermitteln kann? Wie funktioniert dieser Geldmarktfonds überhaupt?

Mein idealer Gedanke ist. Haben Sie eine große Datei auf der Festplatte (2 GB +). Ich aktualisiere das Objekt im Wörterbuch schnell auf der Festplatte, als würde ein Speicher auf der Festplatte gespeichert. Alles ist schnell. Schlüsselwert nachschlagen. Ich schaue nach, bearbeite den Wert, speichere usw. Ich müsste jederzeit schnell auf dieses Objekt mit mehr als 2 GB zugreifen können. Wenn der WCF-Server neu gestartet wird, muss ich schnell auf dieses Objekt mit einer Größe von 2 GB + zugreifen. Deshalb habe ich gedacht 1) Serialisierung 2). Laden und Lesen von / zu MMF. Mein Hauptanliegen ist die Geschwindigkeit in diesem Moment. Ich kann diese 2 GB Daten nicht jedes Mal neu laden, wenn ich das Projekt debugge (es dauert lange).

Vorschläge, Ideen und Gedanken, wie ich mit dieser Situation umgehen soll.

War es hilfreich?

Lösung

Sie können den DObject selbst nicht in einer Speicherzuordnungsdatei behalten..NET-Objekte bewegen sich in der Regel ständig, und Sie können sie nicht zwingen, an einem Ort im Speicher zu bleiben (Sie könnten sie anheften, möchten es aber wirklich nicht).Sie können das Objekt serialisieren und in eine Datei schreiben. Dies bedeutet jedoch, dass jedes Mal mehr als 1 GB Daten geschrieben werden.

Warum nicht den Standardweg gehen und Ihr Objekt in eine Reihe von Datenbanktabellen "serialisieren"?

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