AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Effektivität von Records und Objekten

Ein Thema von Gargamel · begonnen am 28. Dez 2011 · letzter Beitrag vom 29. Dez 2011
Antwort Antwort
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#1

Effektivität von Records und Objekten

  Alt 28. Dez 2011, 22:12
Hi

Ich möchte eine Reihe von Gegenständen in einem dynamischen Array verwalten. Jeder Gegenstand (Anzahl ca. 300-500) hat etwa 40 Eigenchaften. Jetzt frage ich mich, was hinsichtlich Performance und Speicherverbrauch effektiver ist. Ein dyn. Array mit Objekten (inkl. Konstruktoren/Destruktoren/Methoden) oder halt ein dyn. Array mit Records.

Danke
  Mit Zitat antworten Zitat
Klaus01

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

AW: Effektivität von Records und Objekten

  Alt 28. Dez 2011, 22:22
Hallo,

zur Effekttivität und Speicherverbrauch kann ich nichts sagen.

Aber zur Verwaltung von Objecten würde ich eine TObjectList nehmen
und für Records eine TList oder TThreadList.

added:

Ansonsten sind halt die Zugriffsmöglichkeiten verschieden.
Bei Objecten kannst Du Get und Set (Properties) arbeiten.
Die Eigenschaften kannst Du zentral (wartbarer) in einem Object /einer Klasse verwalten.

Bei Records kannst Du direkt auf die Daten zugreifen (rec1.data).
Hast aber als Nachteil eine Handvoll von Routinen die diese Daten verarbeiten
im ganzen Programm verstreut.
Ändert sich etwas im Record musst Du die zugehörige Routine suchen und es auch dort ändern.

Grüße
Klaus
Klaus

Geändert von Klaus01 (28. Dez 2011 um 23:03 Uhr)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#3

AW: Effektivität von Records und Objekten

  Alt 28. Dez 2011, 23:14
Ein "Array of Record" ist das schnellste und kleinste. Ob es Spaß macht, damit zu arbeiten, sei mal dahingestellt.

300-400 Datensätze mit je 40 Eigenschaften ist nun nicht gerade viel, und da würde ich auf jeden Fall zu OOP raten.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#4

AW: Effektivität von Records und Objekten

  Alt 29. Dez 2011, 01:25
Du solltest daran denken, das bei einem dynamischen Array beim Vergrößern im Zweifelsfall alle bisherigen Elemente kopiert werden müssen.
Im Extremfall ist ein Record schneller (mindesten eine Indirektion weniger) als ein Objekt, aber bis du das merkst, fallen dir vermutlich andere Sachen auf die Füße (siehe dyn. Array).

Wenn du etwas mehr Informationen gibst, wie du mit Daten arbeiten willst (wahlfrei vs. hintereinanderweg, usw.), könnte man dir vmtl. besser helfen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.316 Beiträge
 
Delphi 12 Athens
 
#5

AW: Effektivität von Records und Objekten

  Alt 29. Dez 2011, 09:50
Du solltest daran denken, das bei einem dynamischen Array beim Vergrößern im Zweifelsfall alle bisherigen Elemente kopiert werden müssen.
In neueren "Delphis" ist FastMM schon an Board, das Optimiert dabei schon etwas.

Statt einem dynamischen Array bietet sich auch eine generische TList an, welche zwar wieder etwas "langsamer" ist, aber dafür noch ein paar nette Extras bietet.


Ich verwende Arrays vorallem dann, wenn ich mich nicht im die Erstellung/Speicherverwaltung der enthaltenen "Objekte" kümmern will.

Wenn man die Liste öfters verändert und vorallem mitten Drin, bzw. am Anfang Records einfügt oder löscht, dann wird dieser Vorgang immer langsamer, je größer die Records werden > mehr Daten.
Bei Objekten sind es dagegen immer nur SizeOf(TObjekt) Bytes pro zu verschiebendem Eintrag.




PS: Bei einem Array of Record, bzw. bei einer TList<Record>, liegen alle Record-Daten zusammen in einem Speicherbereich.
Bei einer Objektliste liegen diese Daten/Objekte überall verstreut im RAM und verbrauchen zusätzlichen Verwaltungsoverhead im Speichermanager.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (29. Dez 2011 um 09:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#6

AW: Effektivität von Records und Objekten

  Alt 29. Dez 2011, 10:44
In neueren "Delphis" ist FastMM schon an Board, das Optimiert dabei schon etwas.
Aber auch FastMM wird nicht zB. ein halbes Kilobyte reservieren (~40*100), weil ein dynamisches Array noch 100 Einträge wachsen könnte.
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz