Dictionary und Speicherprobleme

24/09/2008 - 09:50 von Karsten Jung | Report spam
Hallo zusammen,

ich hab' gerade ein paar Speicherprobleme, vielleicht könnt ihr mir
helfen.

Es werden durch eine Konvertierroutine Elemente erzeugt. Ein Elemente
kann Unterelemente haben (wie ein

XML-Baum), das Unterelemente ist durch einen String, der Key im
folgendem Dictionary, eindeutig

identifiziert.


Definitionsausschnitt, vereinfacht.


internal class Element
{

public Element Parent; //Übergeordnetes Element, null wenn ganz oben

public string Key; //Schlüssel des Elementes. Ist eindeutig innerhalb
einer Ebene

public string Value; //Element-Wert

public Dictionary<string,Element> Children;

// Erzeugt den Pfad des Elements
// Prinzip: ... + Parent.Parent.Key + Parent.Key + this.Key
public string GetPath() { ... }

}



Jetzt ist es so, dass ich insgesamt bei einer Konvertierung insgesamt
mehrere Millionen Elemente habe und

die Dictionaries extrem viel Speicher brauchen. Ein Großteil des
Speichers wird durch den Key verbraucht.

Eine Idee von mir wàr', den Key, der im Moment ein string ist, in
einem int zu verwandeln.
Dafür bràuchte ich aber eine gute Hash-Funktion, die einem string
eineindeutig einen int-Wert zuweist.
Key-Lànge: 5-50 Zeichen

Habt ihr da eine Idee?

Vielleicht habt ihr auch noch andere Ideen, wie ich mein
Speicherproblem in den Griff bekommen kann?

Bemerkung:
Am Ende der Konvertierung gibt es ein einziges Elemente, welches zig
Children hat, die Children wiederum

Children, etc.
Dieses Element wird dann weiterverarbeitet.

Ich sag' schonmal Danke für's Lesen.

Karsten
 

Lesen sie die antworten

#1 Thomas Scheidegger
24/09/2008 - 10:14 | Warnen spam
Hallo Karsten

Dictionaries extrem viel Speicher brauchen



Nur zur Sicherheit:
Collections sind selber relativ 'schlank',
es dürften primàr deine eigenen Daten darin sein
die Speicher benötigen.
ggf. ist bei Collections auf die (Anfangs-)Kapazitàt
zu achten, etwa beim Konstruktor.



den Key, der im Moment ein string ist, in einen int zu verwandeln.
Dafür bràuchte ich aber eine gute Hash-Funktion



a.) würde denn danach der Key-String wirklich überflüssig?
(denn nur so wird Speicher frei!)
b.) ist schon gewàhrleistet, dass die Key-Strings unique sind?
Falls ja,
dann reicht doch eigentlich ein simpler (globaler) Zàhler ('Index')?


Speicherproblem in den Griff bekommen kann?



schlussendlich: genug RAM und/oder 64-Bit OS,
bzw Auslagerungs/Splittungs-Konzepte usw.




Thomas Scheidegger - 'NETMaster'
http://dnetmaster.net/

Ähnliche fragen