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 4 von 4   « Erste     234   
Benutzerbild von Sir Rufo
Sir Rufo

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

Re: Dynamische Arrays - Overhead

  Alt 25. Okt 2009, 09:21
Zitat von Medium:
Das heisst ja, dass jeder Datensatz bei dir (1200+1050+1024)/5060720 = 0,00064694 Pixel hoch ist - Reschpäckt!
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
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
 
#32

Re: Dynamische Arrays - Overhead

  Alt 25. Okt 2009, 10:57
Och muh, jetzt versteh ich erstmal den latenten Sarkasmus deines Postings... Grippaler Infekt macht Hirn weicher als angenehm ist

Aber back to topic, sorry.
"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
blablab

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

Re: Dynamische Arrays - Overhead

  Alt 25. Okt 2009, 21:17
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

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


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... 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

Nochmal Danke für eure Hilfe und euer Interesse!
Grüße
blablab
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Dynamische Arrays - Overhead

  Alt 25. Okt 2009, 22:43
Das mit dem Abverlangen kenn ich

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


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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


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 21:51 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