| Autor |
Beitrag |
klausiemausie
      
Beiträge: 98
Win XP, Win Vista Ultimate
Delphi 6
|
Verfasst: So 08.02.09 09:59
so nun endlich habe ich mein programm fertig, aber es verbraucht zu viel arbeitsspeicher, nämlich über 400 mb ram, das is für so ein relativ kleines programm sehr viel. worauf sollte man denn achten, bzw. was sollte man ändern, um den speicherverbrauch zu senken?
gruss klaus
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: So 08.02.09 10:15
Naja, das kommt ganz darauf an, was dein Programm so macht. Hast du viele große Bilder drin? Gibst du zwischendurch benötigten Speicher wieder frei? Hast du evtl. viele Konstrukte der Form Setlength(MeinArray, length(MeinArray) + 1) drin, die sehr oft aufgerufen werden?
_________________ We are, we were and will not be.
|
|
klausiemausie 
      
Beiträge: 98
Win XP, Win Vista Ultimate
Delphi 6
|
Verfasst: So 08.02.09 10:37
viele bilder habe ich drin, aber das sind alles pngs, die nich grösser sind als 10 kb oder so. arrays hab ich einige drin ja, aber von speicherfreigabe weiss ich nichts, wie macht man das, wie gehts das, diese struktur die du da angegeben hast, hab ich nicht verwendet in meinem programm
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: So 08.02.09 10:46
PNG oder JPG ist völlig egal - wenn du die Bilder lädst, in ein Image z.B., dann sind das (oft) intern Bitmaps und verbrauchen entsprechend viel Platz.
Speicher freigeben: Ganz grob muss zu jedem Create auch ein Free in deinem Code vorkommen.
_________________ We are, we were and will not be.
Zuletzt bearbeitet von Gausi am So 08.02.09 10:47, insgesamt 1-mal bearbeitet
|
|
uko
      
Beiträge: 220
Erhaltene Danke: 1
Win XP, VISTA, WIndows 7
Delphi 2007/2010 Prof
|
Verfasst: So 08.02.09 10:47
Du mußt jedes Objekt, das Du erzeugst auch wieder freigeben. Sonst bleibt der Speicher dafür bis zum Programmende einfach reserviert.
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| myObject := TMyObject.Create; try finally myObject.Free; end; |
Einfachster Weg: aktuelle Version von FastMM manuell einbinden und die Überwachung des Speicherverbrauchs einschalten. Dann kriegst Du schon gesagt, wo Du Speicher nicht freigibst
Außerdem schau mal nach so Sachen wie:
Delphi-Quelltext 1: 2:
| var myarray = array[0..1000000] of double; |
(sprich nach vordefinierten arrays großer Dimension. Wenn Du sie nicht wirklich in der Dimension brauchst, dann sind meistens die dynamischen Arrays die bessere Wahl)
Grüße,
Uli
|
|
klausiemausie 
      
Beiträge: 98
Win XP, Win Vista Ultimate
Delphi 6
|
Verfasst: So 08.02.09 11:58
hm gut liegt bestimmt daran, dass alle meine über 30 forms am anfang per create form geladen werden, nur eben nicht angezeigt werden, wie löse ich denn das am galantesten? ich könnte ja in der projektunit das alles rausmachen, bloss wie schreibe ich dass dann in die einzelnen units, wenn eine neue form aufgerufen werden soll, dass die dann geladen wird, und wenn die wieder beendet wird, dass die dann halt ganz verschwindet?
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: So 08.02.09 12:46
_________________ We are, we were and will not be.
|
|
klausiemausie 
      
Beiträge: 98
Win XP, Win Vista Ultimate
Delphi 6
|
Verfasst: So 08.02.09 13:39
ah gut, und wie schreib ich dann dass das fenster wieder verschwindet und der speicher freigegeben wird?
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 08.02.09 14:49
Setz im OnClose des Formulars Action auf caFree, dann wird dieses beim Schließen aus dem Speicher entfernt.
klausiemausie hat folgendes geschrieben : | | hm gut liegt bestimmt daran, dass alle meine über 30 forms am anfang per create form geladen werden |
Aber 30 Formulare? Selbst Projekte von mir, die nicht die allerkleinsten sind, haben deutlich weniger. Z.B. hat eines bei dem ich gerade geschaut habe 94 Units und ca. 45.000 Zeilen Quelltext, aber nur 14 Formulare.
Bist du sicher, dass du das nicht auf weniger zusammenfassen kannst? Machen die Formulare wirklich alle vollkommen verschiedene Sachen?
Die Speicherverwendung wird aber vermutlich eher an Multimediainhalten liegen, ob wie bereits angesprochen Bilder oder andere Sachen.
|
|
|