Aggregation mit Listen oder ähnlichen Datenstrukturen
-
Hi,
habe eine Klasse, die mehrere Listen aggregiert, die jeweils 2-10 Objekte enthalten können. Die Objekte bestehen aus nicht mehr als 2-10 Primitiven (meist int und string). Z.Z. nutze ich dafür List<>.
Da ich diese Hauptklasse u.U. wohl mehrere tausend mal instantiieren werde, frage ich mich grade, ob da Speicherprobleme auf mich zukommen können, die in der Wahl der DS begründet sind, und wie groß der Overhead einer List<> ist. Sollte ich da alternative DS nutzen?
Ja, ich weiß, "Premature Optimisation is the root of all evil", aber aufgrund der Masse an Objekten bin ich mir über die Auswirkungen nicht sicher.
Welche DS ist also für viele kleine Objekte besser geeignet? Und welche wäre für wenige große besser geeignet?
gruß
Martin
-
Wenn es dir wirklich auf den Speicherbedarf ankommt, dann hast du mehrere Optionen zur Verfügung:
Zum einen könntest du mittels List<...>.ToArray() nur noch nach der Generierung die Rohdaten dir liefern lassen (oder aber gleich ein Array der passenden Größe erstellen, falls dieser Wert je Liste bekannt sein sollte)
Und zum anderen könntest du mittels List<...>.TrimExcess() die Liste selber verkleinern lassen.
Beides kostet jedoch ein wenig Performance...Der Overhead bei einer List<...> ist im Vergleich zu anderen Datenstrukturen, wie LinkedList oder Dictionary weitaus geringer, da die Daten (wie bei einem Array einfach hintereinander im Speicher stehen - bei Referenztypen wie String natürlich nur die Referenz).
-
Ah, danke für die Info. Ja, das klingt doch schonmal gut. Vor allem dieses ToArray().