Re: Dictionaries - schnell und effizient?
- From: Michael Stum <devnull@xxxxxxx>
- Date: Wed, 17 Oct 2007 20:40:45 +0200
Michael v. Fondern schrieb:
Michael Stum:Hallo,
ich muss in einer Anwendung eine Art verschachteltes assoziatives Array abbilden, also so etwas:
ID
+--Titel => Wert
+--Datum => Wert
+-- ...
+-- ...
Das Problem ist, das ich davon ca. 100.000 Stück kurzzeitig im Speicher halten muss und daher nicht eine eigene Klasse schreiben will (Der overhead scheint mir zu groß).
Ich nehme mal an, du meinst 100.000 IDs. Und die IDs lauten nicht 0,1,2,...,99999 , oder?
Ich brauche 100.000 Stück von diesen verschachtelten Dictionaries, also 100.000 unterschiedliche IDs.
Die IDs sind nicht sequentiell, sondern quasi zufällig (sprich: ich weiß vorher nicht, wie die sind, außer das es Int32 sind).
Da das "innere array" nicht typsicher sein muss, dachte ich an ein Dictionary<int,Dictionary<string,string>> - das soll wohl seit .net 2.0 besser sein als eine Hashtable und macht eigentlich genau das, was ich will.
Performance- und Speicherbedarf bei "Dictionary" wird sich gegenüber "Hashtable" wahrscheinlich nur geringfügig anders verhalten, Dictionary ist halt einfach die typsichere Variante.
Gäbe es eine resourcenschonendere Möglichkeit, so eine Struktur intern abzubilden, oder ist ein verschachteltes Dictionary schon der idealfall?
Du kannst natürlich einfach verschachtelte Listen nehmen - das braucht garantiert etwas weniger Speicher, nur der Zugriff ist dann bei großen Datenmengen bedeutend langsamer. Wenn deine innere Struktur allerdings nur wenige Einträge hat, ist nicht gesagt, ob nicht eine Liste sogar schnellere Zugriffe liefert als ein Dictionary. Definier dir doch mal folgendes:
class Pair
{
public string Schlüssel;
public string Wert;
}
und nimm dann ein Dictionary<int , List<Pair> >. Das Suchen und Finden von Werten anhand eines Schlüssels in der Liste geht dann natürlich nicht mehr ganz so elegant wie vorher, wenn deine Listen allerdings sehr klein sind (<5 bis 10 Elemente), wird sich das von der Performance her kaum vom Dictionary unterscheiden. Noch ein Tipp: sorge dafür, dass die List-Instanzen möglichst exakt die Kapazität haben ( Synopsis: new List<Pair>(capacity) ) , die sie brauchen, nicht mehr und nicht weniger, das spart Speicher und bringt evtl. auch Performance.
Danke, das probiere ich mal aus!
Generell hat die Innere Liste maximal 56 Unterpunkte, momentan sind es 10.
Eine eigene Klasse wollte ich vermeiden weil das ja Overhead bedeutet, aber ich komme dabei aus dem PHP Bereich wo ein array deutlich "billiger" ist als eine Klasse - aber bei einer List<> oder Dictionary<> habe ich eh eine Klasse, also probiere ich mal, meine eigene oder ob eine List<> besser ist.
Danke für den Tipp!
--
http://www.Stum.de
e-Mail Adresse ist gültig, wird aber äußerst selten gelesen.
.
- References:
- Dictionaries - schnell und effizient?
- From: Michael Stum
- Re: Dictionaries - schnell und effizient?
- From: Michael v. Fondern
- Dictionaries - schnell und effizient?
- Prev by Date: Re: Dictionaries - schnell und effizient?
- Next by Date: Text im LinkLabel Control scrollen
- Previous by thread: Re: Dictionaries - schnell und effizient?
- Next by thread: Threads und Steuerelemente, gehts auch einfacher?
- Index(es):
Relevant Pages
|