Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

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)

Sir Rufo 25. Okt 2009 09:21

Re: Dynamische Arrays - Overhead
 
Zitat:

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

häh, wie kommst du denn da drauf?

Die Datensätze werden flächig angezeigt und die jeweiligen Werte sind farblich dargestellt.
Also ist jeder Datensatz 1 Pixel hoch :mrgreen:

Medium 25. Okt 2009 10:57

Re: Dynamische Arrays - Overhead
 
Och muh, jetzt versteh ich erstmal den latenten Sarkasmus deines Postings... Grippaler Infekt macht Hirn weicher als angenehm ist :stupid:

Aber back to topic, sorry.

blablab 25. Okt 2009 21:17

Re: Dynamische Arrays - Overhead
 
Falls es euch noch interessiert:

Bei der neuen "verbesserten" Datenstruktur hab ich alles hintereinander in einen Array of Pointer reingeschrieben.
Dann hab ich noch ein bisschen rumgetrickst, damit ich an meiner alten Datenstruktur kaum was ändern musste und nicht den kompletten code umändern musste.

Außerdem hatte ja diesen Code geschrieben
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;
Als himitsu schrieb dass es bei ihm einwandfrei funktioniert hab ich mich nochmal damit beschäftigt und da ist mir etwas aufgefallen, mein code war doch ein klitzekleines bisschen anders :oops: :oops: :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;
   for i := 0 to zeilen - 1 do begin
      SetLength(arr, i);
      SetLength(arr[i].strs, spalten);
   end;
end;
Dadurch entsteht die schreckliche Fragmentirung des Speichers...

Also hab ich nochmal ALLES umgeschrieben, die "verbesserte" Datenstruktur wieder rückgängig gemacht und den Fehler behoben. Jetzt funktioniert es dank eurer Hilfe einwandfrei :-D


Zu den vielen Datensätzen:
Als erstes sind die 100.000 Datensätze ein Maximalwert. Der wird wahrscheinlich nie erreicht werden, aber ich verlange halt etwas von meinen Programmen... :-D Nur dadurch bin ich ja letztendlich auf den blöden Fehler gekommen...
Und ich brauche die ganzen Datensätze im Speicher gerade damit ich es Filtern kann. Und so wies jetzt aussieht ist das auch kein Problem, weil das gerade mal ein paar MB sind und es inzwischen auch recht flüssig läuft...

Und eins noch: Ich zeige die ganzen Datensätze nicht auf einmal an. Ich möchte die nur im SPeicher haben damit ich sie so schnell wie möglich anzeigen kann, aber nicht um alle gleichzeitig anzuzeigen. So groß ist mein bildschirm auch wieder nicht :P

Nochmal Danke für eure Hilfe und euer Interesse!
Grüße
blablab

himitsu 25. Okt 2009 22:43

Re: Dynamische Arrays - Overhead
 
Das mit dem Abverlangen kenn ich :oops:

Mein SSF hab ich auch mehrmals zum Test auf 2 Terrabyteplatten losgelassen, was im Normalfall wohl auch keiner so oft macht :nerd:


Und jupp, daß ist genau soein Problem.
Das zweite Array wird vom Speichermanager meißt hinter das Erste gelegt, weswegen für das Erste dann kein/kaum Speicher zur Inplace-Vergrößerung ist und es wieder hinten drankopiert wird und so weiter ... dadurch bleiben vorne sehr viele und auch größere freie Speicherplätze, welche aber Windows ja als belegt ansieht (siehe Taskmanager), da sie ja vom DelphiMM reserviert sind.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:27 Uhr.
Seite 4 von 4   « Erste     234   

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