AGB  ·  Datenschutz  ·  Impressum  







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

Dynamische Arrays - Overhead

Ein Thema von blablab · begonnen am 24. Okt 2009 · letzter Beitrag vom 25. Okt 2009
Antwort Antwort
Seite 3 von 4     123 4      
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#21

Re: Dynamische Arrays - Overhead

  Alt 24. Okt 2009, 20:06
Nochmal verständlich:
Delphi-Quellcode:
procedure overhead;
var i, zeilen, spalten: integer;
      arr: array of array of Typ;
begin
   zeilen := 32000;
   spalten := 25;
   SetLength(arr, zeilen);
   for i := 0 to zeilen - 1 do begin
      SetLength(arr[i], spalten);
   end;
end;
Mein Problem ist dass dieser Code nicht ca. Zeilen*Spalten*SizeOf(Typ) Bytes Ram braucht, sondern eher das 20fache.
  Mit Zitat antworten Zitat
Tryer

Registriert seit: 16. Aug 2003
200 Beiträge
 
#22

Re: Dynamische Arrays - Overhead

  Alt 24. Okt 2009, 20:11
1. Das ist ja nunmal nicht der Record den du vorgestellt hast
2. Warum bei diesem "einfachen" 2-dimensionalen Array nicht sofortSetLength(arr, zeilen, spalten);
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#23

Re: Dynamische Arrays - Overhead

  Alt 24. Okt 2009, 20:24
habs zu stark vereinfacht

Delphi-Quellcode:
procedure overhead;
var i, zeilen, spalten: integer;
   arr: array of record
      cont: Pointer;
      strs: array of integer;
   end;
begin
   zeilen := 32000;
   spalten := 25;
   SetLength(arr, zeilen);
   for i := 0 to zeilen - 1 do begin
      SetLength(arr[i].strs, spalten);
   end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Dynamische Arrays - Overhead

  Alt 24. Okt 2009, 21:17
Delphi-Quellcode:
procedure overhead;
var i, zeilen, spalten: integer;
   arr: array of record
      cont: Pointer;
      strs: array of integer;
   end;
begin
   zeilen := 32000;
   spalten := 25;
   SetLength(arr, zeilen);
   for i := 0 to zeilen - 1 do begin
      SetLength(arr[i].strs, spalten);
   end;
end;
genau dieser Code belegt bei mir, laut Taskmanager zusätzliche 3,748 MB (D7) bzw 3,764 MB (D2009)
also fast 3,8 MB, so wie ich ausgerechnet hatte
(XP32)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#25

Re: Dynamische Arrays - Overhead

  Alt 24. Okt 2009, 21:47
Vielen Dank an alle!

Hab jetzt ne neue Datenstruktur und es klappt
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#26

Re: Dynamische Arrays - Overhead

  Alt 24. Okt 2009, 23:35
Hi,

Aber bist du dir sicher, dass es überhaupt zu irgendeinem Zeitpunkt sinnvoll ist so viele Datensätze auf einmal anzuzeigen oder überhaupt im Speicher rumliegen zu haben?

1000 ist ja schon ne ganze Menge.. Und niemand wird sich je 1000 Datensätze angucken bzw alle auf einmal brauchen. die kannst du auch alle gar nicht auf einmal anzeigen. Und im Speicher brauchst du auch nicht immer alle. Ich würde zusehen, dass du nur das speicherst was du (gerade) auch wirklich brauchst...
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Dynamische Arrays - Overhead

  Alt 24. Okt 2009, 23:59
Ansonsten kommt es nur auf die Verwaltung drauf an ... in nichmal 60 MB bekommt ich locker 'nen großes Verzeichnislistening mit 300.000 Datensätzen/Dateien rein und zu jeder Datei noch 'ne Menge Zusatzinfos (Hier im Forum suchenSSF).
Also viele Datensätze bedeuten nicht immer gleich massig Speicherverbrauch.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#28

Re: Dynamische Arrays - Overhead

  Alt 25. Okt 2009, 00:11
Zitat von Neutral General:
Hi,

Aber bist du dir sicher, dass es überhaupt zu irgendeinem Zeitpunkt sinnvoll ist so viele Datensätze auf einmal anzuzeigen oder überhaupt im Speicher rumliegen zu haben?

1000 ist ja schon ne ganze Menge.. Und niemand wird sich je 1000 Datensätze angucken bzw alle auf einmal brauchen. die kannst du auch alle gar nicht auf einmal anzeigen. Und im Speicher brauchst du auch nicht immer alle. Ich würde zusehen, dass du nur das speicherst was du (gerade) auch wirklich brauchst...
Warum nicht, ich starre hier den ganzen Tag auf 5.060.720 Datensätze die sich zudem auch noch temporär ändern, manchmal sogar ganz erheblich
3 Monitore 1900x1200, 1400x1050, 1280x1024
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#29

Re: Dynamische Arrays - Overhead

  Alt 25. Okt 2009, 02:29
Das heisst ja, dass jeder Datensatz bei dir (1200+1050+1024)/5060720 = 0,00064694 Pixel hoch ist - Reschpäckt!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

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

Re: Dynamische Arrays - Overhead

  Alt 25. Okt 2009, 08:27
Nachdem die Datenstruktur komprimiert wurde (durch ein einziges Array ginge das), könnte man noch die Visualisierung in Angriff nehmen. Man muss nicht alle 100.000 Datensätze anzeigen sondern jeweils nur die paar, die auf einen Bildschirm passen. Beim Scrollen kann man ja aus dem RAM nachladen. Und über das Filtern wird die Datenmenge eh beschränkt.

Aber wer partout 100.000 Datensätze anzeigen will (vermutlich in der Ansicht 'noch kein Filter' gesetzt), der kann das ja machen.

Die Optimierung der Visualisierung kann jedoch nicht ungefragt geschehen, dann das ist ja nicht Thema dieses Threads. blablab wird dann, wenn er meint, Hilfe/Anregungen zu benötigen, einen anderen Thread aufmachen.

Ich würde mich freuen, wenn blablab die Lösung (also die Änderungen in seiner Struktur) kurz erläutern würde.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 16:39 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