AGB  ·  Datenschutz  ·  Impressum  







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

2GB Ram wegen Dynamischen Array

Ein Thema von BeBored · begonnen am 28. Aug 2008 · letzter Beitrag vom 30. Aug 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von BeBored
BeBored

Registriert seit: 2. Jun 2004
Ort: Cremlingen
90 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

2GB Ram wegen Dynamischen Array

  Alt 28. Aug 2008, 13:20
Hallo,

ich versuche ja ein Gleisplanprogramm zu schreiben und dazu benutze ich ein Dynamisches Array mit 4 Dimensionen.GleisArray: array of array of array of array of string; Dann lese ich aus der Datenbank die einzelnen Felder von einer SQL Abfrage für ein DrawGrid ein:
Delphi-Quellcode:
SetLength(GleisArray, 0,0,0,0);
Count := queryTexte.RecordCount +1;
SetLength(GleisArray, Count, Count, Count, Count);
Und dann wird es mit den Daten gefüllt:
Delphi-Quellcode:
while not queryTexte.Eof do
  begin
    GleisArray[i, 0, 0, 0] := query.FieldByName('x').AsString;
    GleisArray[0, i, 0, 0] := query.FieldByName('y').AsString;
    GleisArray[0, 0, i, 0] := query.FieldByName('Feldtext').AsString;
    GleisArray[0, 0, 0, i] := query.FieldByName('Art').AsString;
    Inc(i);
    query.Next;
  end;
Aber nun frißt die Anwendung 2GB Speicher und das kann eigentlich nur am Array liegen. Benutze ich SetLength falsch? MadExcept zeigt jedenfalls beim Disassembler das Array mit GetMem, ReallocMem und FinalizeArray an.
Matthias
Wer nichts wagt der nichts verliert.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#2

Re: 2GB Ram wegen Dynamischen Array

  Alt 28. Aug 2008, 13:31
Ich würde das mit Objekten und nicht mit einem Array lösen.

Delphi-Quellcode:
TGleisAbschnitt = class(TObject)
private

public
  property X: Integer;
  property Y: Integer;
  property FeldText: string;
  property Art: string;
end;

TGleis = class(TObjectList)
private

public
  property Items[Index: Integer]: TGleisAbschnitt;
end;
Nur mal so als Rumpf.
  Mit Zitat antworten Zitat
Benutzerbild von BeBored
BeBored

Registriert seit: 2. Jun 2004
Ort: Cremlingen
90 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: 2GB Ram wegen Dynamischen Array

  Alt 28. Aug 2008, 13:35
Bin für alles offen, aber mit einer ObjectList habe ich noch nie gearbeitet. Kannst du mir ein näheres Beispiel geben?
Matthias
Wer nichts wagt der nichts verliert.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#4

Re: 2GB Ram wegen Dynamischen Array

  Alt 28. Aug 2008, 13:42
Das Tutorial von Luckie, sollte Dir dabei weiterhelfen. Da werden die Grundlagen vermittelt. Hat mir auch sehr geholfen und kann ich nur empfehlen

Hier der Link zum PDF : http://www.michael-puff.de/Developer..._in_Delphi.pdf

Edit:
Hier noch der Link zum Tutorial in der DP : http://www.delphipraxis.net/internal...hlight=klassen
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#5

Re: 2GB Ram wegen Dynamischen Array

  Alt 28. Aug 2008, 14:04
so wie das aussieht würde dir ein 1-D array auch reichen.

Das dann als Elemente einen Record hat

Delphi-Quellcode:

Tgleis = Record
  x,
  y,
  Feldtext,
  Art:String;
end;

GleisArray = Array of TGleis;
das wäre dann auch deutlich geringer im Speicherbedarf als dein n^4 array
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Benutzerbild von BeBored
BeBored

Registriert seit: 2. Jun 2004
Ort: Cremlingen
90 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: 2GB Ram wegen Dynamischen Array

  Alt 28. Aug 2008, 14:16
Mit Klassen weiß ich ein wenig bescheid, die nutze ich oft aber mit ObjectList habe ich noch nie gearbeitet.
Aber ich gehe gerade dieses Tutorial durch.
Danke für die Hilfe. Verbraucht ein Array dieser größe (Count ist ungefähr 150) so viel Speicher?
Matthias
Wer nichts wagt der nichts verliert.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#7

Re: 2GB Ram wegen Dynamischen Array

  Alt 28. Aug 2008, 14:26
Zitat von BeBored:
Verbraucht ein Array dieser größe (Count ist ungefähr 150) so viel Speicher?
Ja.

Code:
150^4 = 506250000

String, wenn nichts drin steht, glaub ich, 4 Bytes.

506250000*4 Bytes = 2025000000 Bytes, ungefähr 1,885928213596343994140625 Gigabytes
MfG,
Bug
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#8

Re: 2GB Ram wegen Dynamischen Array

  Alt 28. Aug 2008, 14:33
und wenn du das 1-D machst sind das eben nur


150 * 4 = 600 B
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Benutzerbild von BeBored
BeBored

Registriert seit: 2. Jun 2004
Ort: Cremlingen
90 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: 2GB Ram wegen Dynamischen Array

  Alt 28. Aug 2008, 15:35
Achso ok
Da ich noch heute etwas mit dem Programm testen will, habe ich das RecordArray genommen, das klappt super... blöd das ich nicht gleich darauf gekommen bin. Aber man lernt ja nie aus
Früher oder später werde ich mich aber intensiv mit ObjectList auseinandersetzen.
Ich danke herzlich für eure wie immer großartige Hilfe
Matthias
Wer nichts wagt der nichts verliert.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: 2GB Ram wegen Dynamischen Array

  Alt 29. Aug 2008, 00:58
Edit: Ich hab grad erst erkannt, dass in der 4D-Array Variante einfach nur kaum etwas vom reservierten Speicher verwendet wurde. Ich hab im Text hier vor zwar vorgeschlagen die Daten "on demand" aus der DB zu holen, aber wenn jeder der Strings im Schnitt so 10 Zeichen hat sind das insgesamt ja nur ca. 32kB Gesamtverbrauch.
Ich wollte dann nur noch anmerken, dass mir die Felder "x" und "y" so vorkommen, als wäre es nicht nur speicherschonender sondern auch nachher im Programm deutlich besser zu handhaben, wenn du diese Werte nicht als klobigen String, sondern als Zahlenwert hälst. String-Konversionen sehen doof aus, und kosten vergleichsweise viel Zeit.
"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
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 17:43 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