Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#28

AW: Maßnahmen zum Speicherverbrauch minimieren

  Alt 16. Jul 2015, 11:35
da dadurch nur noch ein Hash im Speicher bleibt statt des ganzen Strings.
Das halte ich für ein Gerücht: dann müsste die Hash-Funktion ja eindeutig sein und das Dictionary ließe sich nicht aufzählen.
Das denke ich auch. Hash-Werte lassen sich ja nicht in einen Ursprungs-String zurück wandeln. Unterschiedliche Strings können den gleichen Hash-Wert haben.

Bei Video2Brain gibt es ein gutes Tutorial zu Datenstrukturen: https://www.video2brain.com/de/video...atenstrukturen
Ist so ein kleiner 3h-Ersatz für ein 3jähriges Studium.
Ich fand es interessant, wenn auch nicht alles ganz neu war.


@jaenicke

Aber ansonsten scheint Euer Problem zu meinem zu passen. Ich muss die Speichergrößen nochmal zusammentragen. Mit und ohne Delphi sowie als Debug und Release. Mache ich mal heute Abend.
Unter 64 Bit gab es die Probleme natürlich nicht. Ich hatte da mal ein paar Mio Mainobjekte versucht. Aber ich will natürlich dennoch das Ganze möglichst optimieren.


@Sir + Bug

Ja, die Richtung kommt schon hin. Eigenschaften von Objekten werden mit Namen bezeichnet (z.B. "FirstName"). Dem wird dann ein Wert zugeordnet (z.B. "Sir").
Wenn es viele Objekte gibt, die eine Eigenschaft "FirstName" haben wird der String häufig verwendet.

Nun hatte ich aber in der Hilfe (http://docwiki.embarcadero.com/RADSt...e/String-Typen) gelesen (oder es so verstanden), dass Delphi "FirstName" nur einmal erzeugt und künftig Referenzen darauf benutzt. Ändert eine Referenz ihren Wert in "Test" wird der Teststring neu angelegt und der RefCounter von "FirstName" reduziert. Gibt es keine Referenz mehr auf "FirstName" wird der Speicherplatz freigegeben. Ist das richtig?

Ich hatte auch schon überlegt (genauer gesagt ist das auch aus einem Projektinternen Grund ernsthafte Absicht ), in den Eigenschaften statt auf einen Namen-String auf ein Namen-Objekt zu verweisen, das einen String enthält. Dann würden nur noch Pointer verbraucht werden und das Namensobjekt könnte beliebig oft referenziert werden.
Wenn die vorherige Annahme mit den String-Referenzen stimmt, würde das aber am Gesamtverbrauch nicht mehr viel ausmachen.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (16. Jul 2015 um 13:32 Uhr)
  Mit Zitat antworten Zitat