-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Sir Rufo,
23. Jul 2015
Die Strings, die die Eigenschaften beschreiben sind Meta-Informationen. Die Werte der Eigenschaften sind die Nutzdaten.
Und als Müll habe ich die nicht bezeichnet, sondern nur, dass diese Meta-Informationen den Speicher vollgemüllt haben. Um die Schuhgröße zu speichern hast du 4 Byte Nutzdaten (Double) und 20+ Byte Meta-Informationen (UnicodeString) verbraten.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Sir Rufo,
23. Jul 2015
Hier ging es aber darum, dass eine Handvoll Objekte den Speicher mit Meta-Informationen zugemüllt haben.
Vermutlich haben diese Meta-Informationen mehr Speicher verbraucht als die Nutzdaten. Das ist in meinen Augen keine Optimierung.
Wenn ich tonnenweise Speicherlecks produzieren würde, dann ist das Beseitigen auch keine Optimierung, sondern ich mache es erst dann richtig. Optimierungen...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Sir Rufo,
18. Jul 2015
Eigentlich brauchst du in deinem Projekt ja gar nicht viel ändern.
Du musst nur in dem Name-Setter eine Logik einbauen, die den String cached, bzw. den String aus dem Cache verwendet.
Dann bleibt deine Anwendung wie sie ist und trotzdem verbrennt die keinen Speicher.
So könnte dann ein StringCache aussehen
unit Common.StringCache;
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Sir Rufo,
16. Jul 2015
Weil das ganze Projekt auch völlig unnötig ist :roll:
Es geht doch nur um das BO und die Liste mit den Eigenschaften und die Stelle, wo so ein BO erzeugt wird.
Da ist der Speicherfresser. Warum sollte ich mir etwas anschauen, wo du bunte Striche malst?
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Sir Rufo,
16. Jul 2015
Tja, ich habe dir gezeigt wie man den Speicherbedarf bei vielen gleichen Strings groß macht oder klein hält.
Da du nicht zeigen möchtest, wie du das konkret umsetzt, wirst du dich darum selber kümmern müssen.
Eins kann ich aber sagen:
Das mit den Interfaces und den Strings ist von hinten nach vorn dreimal gedreht und einmal hochgeworfen. Ein String wird doch schon quasi wie ein Interface...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Sir Rufo,
16. Jul 2015
Also liegt dort ein bestimmte und beschränkte Eingabemenge vor ... sag das doch gleich ;)
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Sir Rufo,
16. Jul 2015
Halte ich also für ein Mär, wenn jemand behauptet er hat ein Hash-Algorithmus, der einen Wert aus einer beschränkten Menge liefert und damit auch unbeschränkte Eingabemengen kollisionsfrei hashen kann.
Ein Dictionary unterteilt die Key-Menge in Buckets, wo alle Elemente hineinkommen, die den gleichen Hashwert haben und such dann nur noch in diesem Bucket nach dem passenden.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Sir Rufo,
16. Jul 2015
@stahli
Deine Annahme mit der String-Speicherverwaltung ist leider nicht korrekt, wie dir diese kleine Anwendung zeigen wird, wenn du dabei den Task-Manager beobachtest.
Hier wird auch immer der gleiche String-Wert zugewiesen, aber auf unterschiedliche Art und Weise mit eben einer unterschiedlichen Speicherauslastung, obwohl effektiv gesehen in allen Instanzen, der gleiche Wert enthalten...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Sir Rufo,
16. Jul 2015
:thumb: Das ist meine Vermutung
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Sir Rufo,
16. Jul 2015
Ich vermute, dass genau diese Strings, die den Namen für was auch immer definieren, dir den Speicher vollmüllen.
Das kann ich aber erst sehen, wenn ich sehe, wie du denn mit diesen Namen in deinem BO umgehst
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Sir Rufo,
16. Jul 2015
Ich habe da so eine vage Vermutung, was deinen immensen Speicherbedarf verursacht.
Kannst du mal das Interface von so einem BO zeigen und wie du auf eine Eigenschaft zugreifst?
Ich vermute nämlich, dass du für jede BO Instanz die Eigenschafts-Namen als String im Speicher hast ...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Sir Rufo,
15. Jul 2015
Die von dir angesprochenen Lösungen verlagern das Problem aber nur ein Stück weiter nach hinten. Dann ist nicht erst bei 100.000 Schluss, sondern bei 150.000 (nur ein geschätztes Beispiel).
Wenn der Speicher-Platz nicht reicht, dann kann man das z.B. mit dem Proxy-Pattern lösen.
Dabei hat man dann nicht mehr das fette BO im SPeicher, sondern eben einen (schmalen) Stellvertreter, der die...