AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Record oder Class - was ist sinvoller zu nutzen
Thema durchsuchen
Ansicht
Themen-Optionen

Record oder Class - was ist sinvoller zu nutzen

Ein Thema von eholzer · begonnen am 22. Okt 2009 · letzter Beitrag vom 22. Okt 2009
Antwort Antwort
Seite 1 von 2  1 2      
eholzer

Registriert seit: 22. Okt 2009
51 Beiträge
 
#1

Record oder Class - was ist sinvoller zu nutzen

  Alt 22. Okt 2009, 09:13
Hallo,

ich möchte in einer Liste mehrere tausend Elemente verwalten. Ich könnte ein Element als Record oder als Class definieren. Die liste wird auf der basis von TList definiert. Was ist sinvoller für die Definition von Elementen zu nehmen: Record oder Class? Welche Vorteile/Nachteile gibt es dabei?

Grüße
Eric
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Record oder Class - was ist sinvoller zu nutzen

  Alt 22. Okt 2009, 09:20
Guten Morgen,

bei einer TList musst Du dich um die Speicherfreigabe der Objekte und Records selber kümmern.

Bei einer TObjectList (wenn ownsObject = true) kann die ObjectListe dies für Object selber
machen.

[edit] noch eine Diskussion zu diesem Thema.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Record oder Class - was ist sinvoller zu nutzen

  Alt 22. Okt 2009, 10:57
Eine Klasse hat einen gehörigen Overhead, ein Record eher wenig. Wenn Deine Objekte nur Daten halten, ist es idR sinnvoller, die als Records auszulegen. Gerade wenn man mehrere tausend Stück davon verwaltet. Bei Records könntest Du sogar ein dynamisches Array daraus machen - mit allen Vorteilen aber auch Stolperfallen die das mit sich bringt.
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
eholzer

Registriert seit: 22. Okt 2009
51 Beiträge
 
#4

Re: Record oder Class - was ist sinvoller zu nutzen

  Alt 22. Okt 2009, 12:01
Was ist mit dem Speicherverbrauch? Ich glaube die Records nutzen anderen Speicher als die Klassen?
Kann sich die Wahl zwischen Class und Records auf die geschwindigkeit auswirken?

Danke für die Bemerkungen
Eric
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Record oder Class - was ist sinvoller zu nutzen

  Alt 22. Okt 2009, 12:37
Entscheidungshilfe:
ist die Datenmenge pro Item eher gering, also z.B. ein Wertepaar oder ein Punkt im Raum dann ist ein Record sinnvoll:
Delphi-Quellcode:
// Beispiele für einfache Records
TComplex = record
  rvalue, ivalue : double;
end;
T3DPoint = record
  x: integer;
  y: integer;
  z: integer;
end;
Sind die Daten umfangreicher, dann zahlt sich eine Klasse langfristig auf jeden Fall aus.
Der "gehörige Overhead" ist halb so wild, denn ob der Compiler der Self-Pointer versteckt an eine Methode gibt
oder ob man einen Record als Parameter normalen Prozeduren übergeben muss, macht kaum einen Unterschied.

Wenn man extrem viele kleine Objekte braucht, kann der Record beim Erzeugen einen Vorteil verbuchen.
Ein Objekt wird ja grundsätzlich mit 0x00 initialisiert; beim Record gibt's das nicht.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#6

Re: Record oder Class - was ist sinvoller zu nutzen

  Alt 22. Okt 2009, 12:39
Naja, ob jetzt heap oder stack ist eigentlich wurscht.
Die Klasse braucht halt mehr Platz (allein schon für die vtables die die Zeiger auf die Methoden der basisklasse(n) halten, auch wenn diese nie benutzt werden) und sie braucht länger zum instanzieren. Sogar, wenn Du einen konstruktor auf Deinem Record hast (zum initalisieren z.B.). Records brauchen also weniger speicher und sind schneller erzeugt.

Im großen und ganzen wirkt sich das allerdings nur dann wirklich aus, wenn Du häufig viele Instanzen brauchst. Den Gesamtspeicherverbrauch kann man heutzutage eher vernachlässigen, sofern Dir Klassen einen gewissen Komfort geben, der die Wartung/Handhabung der Sache später stark vereinfacht.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von guinnes
guinnes

Registriert seit: 28. Feb 2007
Ort: Bottrop
265 Beiträge
 
Delphi 5 Enterprise
 
#7

Re: Record oder Class - was ist sinvoller zu nutzen

  Alt 22. Okt 2009, 12:45
Zitat von Phoenix:
(allein schon für die vtables die die Zeiger auf die Methoden der basisklasse(n) halten, auch wenn diese nie benutzt werden)
Das hört sich jetzt an, als ob jede Instanz eine eigene VTable hätte...
Glückauf
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

Re: Record oder Class - was ist sinvoller zu nutzen

  Alt 22. Okt 2009, 12:53
Zitat von Phoenix:
Die Klasse braucht halt mehr Platz..
Der Grössenunterschied beträgt 4 Bytes pro Objekt.
Dazu kommen bei einem nochmal 4 Bytes für den Objektzeiger.
Wenn man Records mit New auf dem Heap erzeugt, dann sind auch beim Record die 4 Bytes für den Zeiger fällig.
Delphi-Quellcode:
// benötigt 4 Bytes pro Instanz
TTestRecord = record
  x : integer;
end;
// benötigt 8 Bytes pro Instanz
// + EINMALIG pro Klasse die VTABLE mit ~ 80 Bytes
TTestKlasse = class(TObject)
public
  x : integer;
end;
Andreas
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Record oder Class - was ist sinvoller zu nutzen

  Alt 22. Okt 2009, 12:55
Gibt es nicht mittlerweile noch einen (potentiellen) Monitor für jedes Objekt? Das wären nochmal vier Bytes.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Zwoetzen

Registriert seit: 19. Sep 2007
Ort: Ilmenau
93 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Record oder Class - was ist sinvoller zu nutzen

  Alt 22. Okt 2009, 13:03
Diese Frage hatte ich vor einiger Zeit auch mal gestellt: Class vs. Record.
Da wurden einige Vor- und Nachteile von Records bzw. Klassen aufgezählt.

(Hmm, wieso hab ich da nicht mehr drauf geantwortet...? )
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14:32 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