Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Daten nicht doppelt laden
jg72 - Di 10.05.11 09:27
Titel: Daten nicht doppelt laden
Hallo Zusammen,
ich habe eine Klasse, welche Daten aus einer Datenbank lädt. Sehr vereinfacht etwa so:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| class Item { int m_nId; string m_sText;
//...
static Item Load(int nId) { Item item = new Item(); // Werte laden return item; } } |
Nun sollen die einzelnen Items nur einmal im Speicher vorgehalten werden und nicht immer geladen werden:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| //... static Item Load(int nId) { Item item = HoleSchonGeladenenItem(nId);
if ( item == null ) { Item item = new Item(); // Werte laden } return item; } //... |
Ich habe nun noch keinen Ansatz, wie ich diese Funktion HoleSchonGeladenenItem schreiben soll (oder welchen anderen Mechanismus ich verwenden kann). Man könnte ja nun alle Einträge in einer SortedList (oder etwas vergleichbares) speichern, allerdings will ich nicht, dass die Einträge länger als nötig im Hautspeicher vorgehalten werden, man müsste also im schlimmsten Fall sowas wie eine Garbage-Collection durchführen. Nur wie stelle ich fest, ob das Objekt noch an anderer Stelle als in der Liste aktiv ist?
Es gibt da bestimmt schon etwas passendes, aber nur was?
Vielen Dank schonmal und viele Grüße,
Jürgen
Th69 - Di 10.05.11 11:41
Hallo und willkommen,
speichere am besten die Werte (Items) anhand der Id in einem Dictionary<Key, Value>:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| static Dictionary<int, Item> items = new Dictionary(int, Item>(); static Item Load(int nId) { if(items.ContainsKey(nId)) { return items[nId]; } else { Item item = new Item(); items.Add(nId, item); return item; } } |
jg72 - Di 10.05.11 17:35
Vielen Dank erstmal,
ich habe jetzt wohl ein bißchen was zum Lesen. Mal sehen, was ich davon verstehe
Viele Grüße,
Jürgen
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!