In unserer Desktop-Anwendung haben wir eine einfache Suchmaschine mit einem inverted index implementiert.In-Memory-Suchindex für die Anwendung nimmt zu viel Speicher auf - irgendwelche Vorschläge?
Leider können einige der Datensätze unserer Benutzer sehr groß werden, z. Aufnahme von ~ 1 GB Speicher, bevor der invertierte Index erstellt wurde. Der invertierte Index selbst beansprucht viel Speicher, fast genauso viel wie die Daten, die indiziert werden (weitere 1 GB RAM).
Offensichtlich verursacht dies Probleme mit Arbeitsspeicherfehlern, da das 32-Bit-Windows-Limit von 2 GB Speicher pro Anwendung erreicht wird oder Benutzer mit weniger spezifizierten Computern Schwierigkeiten haben, die Speicheranforderungen zu bewältigen.
Unser invertierter Index wird als gespeichert:
Dictionary<string, List<ApplicationObject>>
Und dies wird während der Datenlast erzeugt, wenn jedes Objekt so verarbeitet wird, dass die Schlüsselfolge und Beschreibung des applicationObject Wort in dem invertierten Index gespeichert ist.
Meine Frage ist also: Ist es möglich, den Suchindex effizienter im Raum zu speichern? Vielleicht muss eine andere Struktur oder Strategie verwendet werden? Alternativ ist es möglich, eine Art CompressedDictionary zu erstellen? Da es viele Strings speichert, würde ich erwarten, dass es stark komprimierbar ist.
Ich möchte dies wenn möglich vermeiden, da es einfacher ist, den In-Memory-Suchindex zu haben. Aber vielleicht ist es nicht möglich, aber es scheint mir nur möglich zu sein. – RickL