Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dynamische Arrays - Overhead (https://www.delphipraxis.net/142251-dynamische-arrays-overhead.html)

blablab 24. Okt 2009 20:06

Re: Dynamische Arrays - Overhead
 
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.

Tryer 24. Okt 2009 20:11

Re: Dynamische Arrays - Overhead
 
1. Das ist ja nunmal nicht der Record den du vorgestellt hast
2. Warum bei diesem "einfachen" 2-dimensionalen Array nicht sofort
Delphi-Quellcode:
SetLength(arr, zeilen, spalten);

blablab 24. Okt 2009 20:24

Re: Dynamische Arrays - Overhead
 
habs zu stark vereinfacht :oops:

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;

himitsu 24. Okt 2009 21:17

Re: Dynamische Arrays - Overhead
 
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)

blablab 24. Okt 2009 21:47

Re: Dynamische Arrays - Overhead
 
Vielen Dank an alle!

Hab jetzt ne neue Datenstruktur und es klappt :)

Neutral General 24. Okt 2009 23:35

Re: Dynamische Arrays - Overhead
 
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...

himitsu 24. Okt 2009 23:59

Re: Dynamische Arrays - Overhead
 
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.

Sir Rufo 25. Okt 2009 00:11

Re: Dynamische Arrays - Overhead
 
Zitat:

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 :mrgreen:

Medium 25. Okt 2009 02:29

Re: Dynamische Arrays - Overhead
 
Das heisst ja, dass jeder Datensatz bei dir (1200+1050+1024)/5060720 = 0,00064694 Pixel hoch ist - Reschpäckt! :stupid:

alzaimar 25. Okt 2009 08:27

Re: Dynamische Arrays - Overhead
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:16 Uhr.
Seite 3 von 4     123 4      

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