AGB  ·  Datenschutz  ·  Impressum  







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

dynamische Arrays vergrößern

Ein Thema von KahPee · begonnen am 10. Jun 2009 · letzter Beitrag vom 11. Jun 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#1

dynamische Arrays vergrößern

  Alt 10. Jun 2009, 14:11
Hallo,
ich möchte einen dynamischen Array benutzen. Generell ist das kein Problem mit Setlength kann ich ja nun die Länge des Arrays angeben. Nun aber folgendes Problem. Zur Laufzeit soll sich der Array vergrößern, also hat der z.B. erst die Größe 1 und dann später kriegt er die Größe 2 weil dem Array ein neuer Wert hinzugefügt werden soll.
Wenn ich jetzt erneut das Setlenght ereignis aufgerufen wird, wird dann der erste Wert gelöscht? Das möchte ich nämlich verhindern! Ich möchte also, dass ich zur Laufzeit den Array immer weiter vergrößere, dass aber die zugewiesenen Werte erhalten bleiben..
Das Problem ist, dass theoretisch die Maximallänge des Arrays bei unendlich liegt, zu Laufzeit, soll das ganze immer weiter erhöht werden (Stück für Stück) da das Programm auch theoretisch unendlich lange läuft (bzw. bis der Arbeitsspeicher voll ist) hab ich natürlich einen Abbruch des Programms reingeschrieben.

mfg KahPee
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.345 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: dynamische Arrays vergrößern

  Alt 10. Jun 2009, 14:13
Bei der Vergrößerung des Arrays wird der alte Inhalt kopiert, die Werte bleiben also erhalten.

In einer Schleife immer nur um eins vergrößern ist aber extrem langsam. Da ist dann ein Deltawert sinnvoll, so dass das Array immer gleich um 100 oder 1000 (je nach Anzahl) wächst.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: dynamische Arrays vergrößern

  Alt 10. Jun 2009, 14:15
Ist das vergrößern, der Länge um 10 schneller als das Vergrößern der Länge 10mal um 1?

Vielen Dank schon mal für die Antowrt..
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: dynamische Arrays vergrößern

  Alt 10. Jun 2009, 14:17
Zitat von KahPee:
Wenn ich jetzt erneut das Setlenght ereignis aufgerufen wird, wird dann der erste Wert gelöscht?
Ich mache daraus erstmal einen verständlichen Satz:
Zitat:
Wenn erneut Setlength aufgerufen wird, wird dann der erste Wert gelöscht?
Nein, wird es nicht. Warum auch? Überleg mal, wie brauchbar dann dynamische arrays wären, wenn das der Fall wäre.

Desweiteren hätte man sich diese Frage auch schnell durch ausprobieren beantworten können.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.345 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: dynamische Arrays vergrößern

  Alt 10. Jun 2009, 14:18
Zitat von KahPee:
Ist das vergrößern, der Länge um 10 schneller als das Vergrößern der Länge 10mal um 1?
Ja, und je größer die Anzahl der Werte desto viel schneller ist das.

Der Grund ist, dass bei einer Vergrößerung jedesmal ein neuer Platz im Speicher reserviert und der alte Inhalt da hinkopiert wird. Und daher ist das auch arbeitsspeicherintensiv.

Deshalb vergrößere in größeren Schritte, je nach Anzahl der Werte in einer gewissen Zeit.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: dynamische Arrays vergrößern

  Alt 10. Jun 2009, 14:19
wenn die Größe des Arrays geändert wird,
wird eine neues Array angelegt, der Inhalt kopiert, die alte Version gelöscht und der Zeiger zum neuen Array in die Variable eingetragen ... also mit jeder änderung wird das Array kopiert.

Wenn man da einen größeren Sprung nutzt, dann mußt nicht mehr bei jeder änderung das Array geändert/kopiert werden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: dynamische Arrays vergrößern

  Alt 10. Jun 2009, 14:41
Zitat von KahPee:
Ist das vergrößern, der Länge um 10 schneller als das Vergrößern der Länge 10mal um 1?
Zitat von Luckie:
Desweiteren hätte man sich diese Frage auch schnell durch ausprobieren beantworten können.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#8

Re: dynamische Arrays vergrößern

  Alt 10. Jun 2009, 14:43
Ich würde sagen, die Erhöhung der arrays hängt von dem ab, was Du vorhast. Wenn Dein Programm konstant alle zehn Sekunden einen neuen Wert ins array schreibt, ist das relativ egal, ob Du ein oder zehn Elemente zufügst. Dann ist ein Element einzufügen weniger Aufwand. Wenn die neuen Werte in Blöcken kommen, solltest Du auch das array blockweise vergrößern.

Wenn es um Performance bei schnellen Vorgängen geht, arbeitet man besser gleich mit festen arrays oder Du gibst gleich mit setlength eine feste Größe an - wenn Du weißt, dass ungefähr n Werte kommen reservierst den Speicher damit gleich. In der zweiten Variante kannst Du nach ein paar Monaten immer noch dranhängen.

Grüße, Messie
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: dynamische Arrays vergrößern

  Alt 10. Jun 2009, 14:50
Allerdings die Abbruchbedingung ist auch etwas mehr als abenteuerlich: "Lauf bis der Speicher voll ist." Und was passiert danach?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#10

Re: dynamische Arrays vergrößern

  Alt 10. Jun 2009, 15:00
Zitat von Luckie:
Allerdings die Abbruchbedingung ist auch etwas mehr als abenteuerlich: "Lauf bis der Speicher voll ist." Und was passiert danach?
Da stand doch was von Abbruch im ersten Post.

Die Frage ist auch, was will man mit einer solchen Datenmenge im Speicher. Dafür gibt es Festplatten.

Aber solange die Aufgabe nicht klar beschrieben ist, können wir auch lange über eine gute Strategie der Datenverwaltung diskutieren.
  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 00:10 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