AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Speichernutzung: array of record vs. TObject (TList usw.)
Thema durchsuchen
Ansicht
Themen-Optionen

Speichernutzung: array of record vs. TObject (TList usw.)

Ein Thema von Nogge · begonnen am 22. Jul 2005 · letzter Beitrag vom 23. Jul 2005
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#1

Speichernutzung: array of record vs. TObject (TList usw.)

  Alt 22. Jul 2005, 12:01
Hallo Community,
Ich möchte gern mein Programm optimieren, d.h. CPU-Auslastung und RAM-Nutzung soweit wie möglich verringern. Ein Freund von mir hat sich ein ähnliches Programm gebastelt, benötigt aber manchmal nur 1/3 meiner RAM-Nutzung. Ich habe schon dynamisch erstellte Forms eingebaut und arbeite anstelle von TObjects und TLists mit arrays of records. Ich habe schon gemerkt, dass ich ca. 10mal so viele Procedures und Functions benutze (wird mir sonst zu unübersichtlich) als er (was wahrscheinlich der Hauptgrund ist, da diese ja vorher Speicher reservieren), trotzdem wollte ich mal wissen, ob arrays of records wirklich am wenigsten Speicher reservieren (war jedenfalls so meine Überlegung, weil diese ja Zeiger auf eine Speicheradresse setzen und nur wirklich für die Variablen des records Speicher reservieren).
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Speichernutzung: array of record vs. TObject (TList usw.

  Alt 22. Jul 2005, 12:14
Wenn du dynamische Arrays verwendest: vermeide Setlength (Array, length (Array) + 1)

Sonst kannst du RAM Sparen, indem du alles so früh wie möglich freigibst
  Mit Zitat antworten Zitat
barf00s
(Gast)

n/a Beiträge
 
#3

Re: Speichernutzung: array of record vs. TObject (TList usw.

  Alt 22. Jul 2005, 12:18
nen einfacher pointer der _alles_ beinhaltet ist wohl das beste
aber du kannst _genauso_ TList und TObjectList verwenden - bei richtiger anwendung fressen die genauso speicher wie dein array of record
  Mit Zitat antworten Zitat
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#4

Re: Speichernutzung: array of record vs. TObject (TList usw.

  Alt 22. Jul 2005, 12:33
Gibt es denn bei dem array of "Pointer" einen Unterschied im Hinblick auf den array of record?
  Mit Zitat antworten Zitat
barf00s
(Gast)

n/a Beiträge
 
#5

Re: Speichernutzung: array of record vs. TObject (TList usw.

  Alt 22. Jul 2005, 12:36
TList(&seine Freunde) kapselt ja mehr oder weniger nen array of pointer wenn'd mal in die Classes.pas schaust ...
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#6

Re: Speichernutzung: array of record vs. TObject (TList usw.

  Alt 22. Jul 2005, 12:40
Zitat von Nogge:
Gibt es denn bei dem array of "Pointer" einen Unterschied im Hinblick auf den array of record?
Ja, es ist das Schlimmste das Du tun kannst Bei Pointern geht Dir die Eindeutigkeit der hinterlegten Daten "verloren". Records sind nichts anderes als typisierte Pointer, bleibe als bitte dabei

Ansonsten, zum Thema Performance vs. Speicher. In den meisten Fällen sind die Typen von TList & Co. schneller und effizienter in der Nutzung und Programmierung als Records. Ein reiner Record nutzt hingegen (nur etwas) weniger Speicher als ein TList-Objekt. Aus meiner Sicht ist es dieser Speicher nicht wert die "Luxus" eines Listenobjektes nicht zu nutzen.

Records können sich allerdings auch als große Speicherfresser beweisen, wenn man, wie jfheins schon gewarnt hat, immer Dinge wie Setlength (Array, length (Array) + 1) macht

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#7

Re: Speichernutzung: array of record vs. TObject (TList usw.

  Alt 22. Jul 2005, 12:45
Zitat von barf00s:
TList(&seine Freunde) kapselt ja mehr oder weniger nen array of pointer wenn'd mal in die Classes.pas schaust ...
Richtig, aber durch die richtige Verwendung dieser (z.B. Capacity) sind diese Klassen sehr effizient. Und warum sollte man diese Dinge alle nochmal von Hand implementieren

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#8

Re: Speichernutzung: array of record vs. TObject (TList usw.

  Alt 22. Jul 2005, 12:45
Zitat:
Records können sich allerdings auch als große Speicherfresser beweisen, wenn man, wie jfheins schon gewarnt hat, immer Dinge wie Setlength (Array, length (Array) + 1) macht Shocked
Und wie kann man das mit den records effizenter gestalten?
  Mit Zitat antworten Zitat
barf00s
(Gast)

n/a Beiträge
 
#9

Re: Speichernutzung: array of record vs. TObject (TList usw.

  Alt 22. Jul 2005, 12:48
Oo ja wen meinst du jetz?

egal -

das mit den records - das sie kleiner als tlist items sind - ist auch nicht immer richtig - kommt ja auch auf dieses record alignment und blah blubb an

...

fazit:

solle er mit TList arbeiten - und bei klassen/objekten mit TObjectlist
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#10

Re: Speichernutzung: array of record vs. TObject (TList usw.

  Alt 22. Jul 2005, 13:13
Zitat von sakura:
Und warum sollte man diese Dinge alle nochmal von Hand implementieren
Weil man dann nicht mit 5 Mio Bezeichnern aus Classes.pas erschlagen wird, bzw nicht die vcl.dcp referenziert oder weil TList aus polymorpher Sicht relativ unbrauchbar ist, da man die grundlegenden Methoden (Add, ...) nicht überschrieben kann um type safety zu forcieren?

p.s.: Habt ihr schnmal daran gedacht, dass ein Array of Record (also nicht von einem Pointer auf einen record) KOPIEN der Records enthält, die man reinwirft? -> puff jedesmal wenn du da was rausholst kostet es dich 2-mal den Speicher dieses Records bis dieser aus dem Scope rennt...

p.p.s.: Kein Wunder, dass er nur ein 10'tel der Methoden braucht. Er kann Objekte voneinander ableiten und somit auch deren MEthoden. Du musst jedes Mal das Rad neu erfinden...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz