AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein wie speicher sparen -> out of memory
Thema durchsuchen
Ansicht
Themen-Optionen

wie speicher sparen -> out of memory

Ein Thema von Grumble · begonnen am 10. Aug 2004 · letzter Beitrag vom 10. Aug 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Grumble
Grumble

Registriert seit: 19. Mär 2003
Ort: Dresden
203 Beiträge
 
Delphi 6 Enterprise
 
#1

wie speicher sparen -> out of memory

  Alt 10. Aug 2004, 10:10
hi,

ich habe folgendes problem ...

ich soll eine textdatei auslesen und dort bestimmte werte in ein record schreiben, das sieht aber schon recht gross aus und wird auch noch in in dyn. array verpackt..

Code:
H=record
         Typ:string[2];
         RNr,PrArt,UArt,aHKl,mHKl,mTC,sTC,BildTC,Pvon,Pnach:shortint;
         UDAT,HBez,VSch,BSch:string[10];
         UOrt,STRN:string[30];
         UFirma:string[36];
         PrH,PrBr,PrNr:smallint;
         MAT:string[4];
         InSchutz,Zkrzl:string[7];
         UDir:string[1];
         ULang,Stat,MaxRB,ZkrzlZ1,ZkrzlZ2:real;
         VHSNr:string[3];
         hTC:integer;
         SMBez:string[5];
         BildDatBez:String[12];
        end;

      KKS=record
         Typ,DForm:string[2];
         RNr,LGD,HGD,Status,GForm,AAnschl,StEG,HGSchS:shortint;
         SchBez,altSchBez,Bem:string[10];
         Rwert,Hwert,DHSch,LD,BrD,LSch,BrSch,LSchUT,BrSchUT,HSchUT,SchS:real;
         BemLage:string[20];
         AbdKl,SchForm,SchHls,SchUTForm,EH,SchUpl,Abdpl:string[1];
         BJ:smallint;
         BSSchHls,BSSchOT,BSSchUT,BSG:string[4];
         InSchutz:String[7];
      end;

      KKH=record
         Typ,KnlArt:string[2];
         RNr,HGvSch,HGbSch,PrArt,Status,AbwArt,WSZ,BodArt,GrdWabst,NeigKl:shortint;
         HBez,altHBez,vSch,bSch:string[10];
         SHvSch,SHbSCH,HL,HFlges,HFlbef,HFlD,kSchmWZfl,kFrWZfl,kRWZfl,kGewZfl,kHZfl,kIZfl,kTrWZfl:real;
         PrH,PrBr,BJ:smallint;
         MAT:string[4];
         STRN:string[30];
         TEGNr:String[5];
      end;

      KKT=record
         Typ:string[2];
         RNr:shortint;
         EWD,WVbr,Stdm,FrWAn:real;
         TEGNr:String[5];
      end;

      HR=record
        Nr:integer;
        Typ:string[2];
        Vnr:string[4];
        Lbez,Lnr,ZB,EDat,Nu,Lknr,bDS:string[10];
        AZ,Bear,TAM:string[15];
        BANrmLK:string[5];
        txt:string[13];
        Htyp:array of H;
        KKStyp:array of KKS;
        KKHtyp:array of KKH;
        KKTtyp:array of KKT;
        end;

  IData=array of HR;
nun lese ich eine datei aus, filesize zeigt mir ca. 63000
nachdem ca. 5000 eingelesen worden sind krieg ich ne out of memory ... obwohl laut eines speichermenagers sogar noch 130 mb frei sind...
nun habe ich mir ueberlegt ob man evtl. die dateien splitten muss ...

habt ihr evtl. tips wie man wo speicher sparen kann? ich kann leider nicht vom record weg, ich wollte es erst sofort in ne datenbank schreiben, aber meine chefs wollen bloederweise n record
gruss
Grumble

... moege der code mit dir sein ...
  Mit Zitat antworten Zitat
LeoDD

Registriert seit: 30. Jul 2003
43 Beiträge
 
Delphi 2010 Professional
 
#2

Re: wie speicher sparen -> out of memory

  Alt 10. Aug 2004, 10:39
Meines Wissens is der Datenspeicher nicht mit dem Hauptspeicher direkt vergleichbar. Deswegen is noch was frei und trotzdem voll

Ich würds so machen:
Testweise mal "packed record" schreiben statt "record". Weiss aber nicht ab das soviel hilft.

Nicht alles komplett lesen sondern irgendeine Zwischenspeicherung vornehmen. Z.B. max. 1000 Einträge, dann in eine temporäre Datei sichern.

Solange es nur um Einlesen/Schreiben geht, is das simpel. Wenn aber noch Operationen wie Datensatz löschen u.ä. durchgeführt werden sollen, wird das kompliziert.
Erst wenn man dreimal auf Holz klopfen will, stellt man fest, dass die Welt nur noch aus Plastik und Aluminium besteht.
  Mit Zitat antworten Zitat
Benutzerbild von Grumble
Grumble

Registriert seit: 19. Mär 2003
Ort: Dresden
203 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: wie speicher sparen -> out of memory

  Alt 10. Aug 2004, 10:51
danke, aber packed record hat nich viel gebracht, ca. 250 zeilen mehr , zwischenspeichern entspricht irgendwie auch nich so der sache der aufgabe...
gruss
Grumble

... moege der code mit dir sein ...
  Mit Zitat antworten Zitat
roderich
(Gast)

n/a Beiträge
 
#4

Re: wie speicher sparen -> out of memory

  Alt 10. Aug 2004, 11:13
wieso machst du nicht eine Klasse, die dann auch sauber in einer Methode ihren Speicher freigibt ?

Und mal was anderes, habt ihr mit Absicht die Variablennamen so gewählt, daß kein Mensch verstehen kann, was sie enthalten ? Oder stammt der Code noch aus einer Zeit, in der Variablen net mehr als 8 Zeichen haben konnten ?! Sieht ja echt übel aus.....

Was hast Du eigentlich vor mit den Records, sollen die in eine Datei/DB gespeichert werden (wieso dann nicht sofort ?) oder willst du sie für irgendwelche Operationen im Speicher halten ? Dann wär eine Klasse wirklich angebracht.


Roderich
  Mit Zitat antworten Zitat
Benutzerbild von Grumble
Grumble

Registriert seit: 19. Mär 2003
Ort: Dresden
203 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: wie speicher sparen -> out of memory

  Alt 10. Aug 2004, 11:17
oh ? ne klasse bauen ? ich ahnungsloser gibbet da n tut fuer?

aehm die variablennamen hab ich aus purer faulheit so gewaehlt sind nur abkuerzungen ..

die records sollen spaeter wirklich in ne db, ich hab auch gesagt warum nich gleich, aber ich renn da gegen ne wand ... das ganze hat nur den zweck bestimmte daten aus ner textdatei zu importieren, die spaeter dem user praesentiert werden sollen, und er entscheidet was wo gespeichert wird ...
gruss
Grumble

... moege der code mit dir sein ...
  Mit Zitat antworten Zitat
Dannyboy

Registriert seit: 4. Aug 2003
Ort: Delphi-Heaven
418 Beiträge
 
Delphi 7 Personal
 
#6

Re: wie speicher sparen -> out of memory

  Alt 10. Aug 2004, 11:24
Hallo Grumble,
wie LeoDD bereits erwähnte wirst Du das Nachladen der Daten von
der Festplatte nicht verhindern können. Ich schreibe z.Zt. einen Leveleditor
und habe beim Anzeigen der Levels ab einer bestimmten Länge das gleiche
Problem. Daher werden von einem Level immer bloß 2000 Felder
(=8000 Bytes) auf ein Mal aus der Datei in den RAM geladen. Lieber etwas
aufwendiger programmieren und dafür effizient den RAM schonen.
Check this out.
DANNYBOY
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#7

Re: wie speicher sparen -> out of memory

  Alt 10. Aug 2004, 11:25
Zitat von Grumble:
...ich soll eine textdatei auslesen und dort bestimmte werte in ein record schreiben,...
Hai Grumble,
wie ist die Textdatei denn aufgebaut? Stehen alle Informationen für die Records in einer Zeile? Oder ist es eher wie bei einer INI das die Informationen in einzelnen Abschnitten stehen.
Eventuell hast Du ja mal einen kurzen Ausschnit der Datei.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Grumble
Grumble

Registriert seit: 19. Mär 2003
Ort: Dresden
203 Beiträge
 
Delphi 6 Enterprise
 
#8

Re: wie speicher sparen -> out of memory

  Alt 10. Aug 2004, 11:28
keine ini datei, die ist extrem einfach aufgebaut,
beispielzeilen

  • H 0196 SE-DD 21.01.2004
    H
    HI 103.04.1931 ingutis/Limpert
    HI 201S77 Dr.-Külz-Ring
    HI 301S77 01S77 01S78 1015001000B 1 O 3 4
    HK 401S77 0.00 HA 0000
    HI 401S77 a.50 PA 0000
    HI 401S77 0.50 C--- A1 11.00 0000
    HI 401S77 4.10 01S77_1.JPG SN-L 0000
gruss
Grumble

... moege der code mit dir sein ...
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#9

Re: wie speicher sparen -> out of memory

  Alt 10. Aug 2004, 11:34
Es gibt also immer einen Hauptrekord und zu jedem Hauptrecord gibt es beliebig viele "unter Rekords".
Uff... das alles im Speicher zu machen ist doch echt Wahnsinn. Mache deinem Chef klar das dies absolut "Suboptimal" ist.
(Denn auch das ist die Aufgabe eines Programmierers)
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Dannyboy

Registriert seit: 4. Aug 2003
Ort: Delphi-Heaven
418 Beiträge
 
Delphi 7 Personal
 
#10

Re: wie speicher sparen -> out of memory

  Alt 10. Aug 2004, 11:36
Zitat von Grumble:
keine ini datei, die ist extrem einfach aufgebaut,
Uuäääääää???
  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 22:42 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