Entwickler-Ecke
Sonstiges (Delphi) - RAM-nutzung reduzieren
roka6803 - Mi 27.10.04 14:31
Titel: RAM-nutzung reduzieren
Hallo an Alle,
bin relativ neu bei Delphi und habe gerade begonnen einen Skill-Kalkulator zu programmieren. Mein Projekt hat bereits vier Formen und frisst rund 4.9 MB Ram. Nun würde ich gerne wissen ob es möglich ist das zu reduzieren auf ein Minimum den am Ende (wenn es je fertig werden sollte *g*) hat das Projekt rund 30 bis 35 Formen bei 400-450 eingefügten Jpegs.
Natürlich werde ich alle eingebundenen Files in eine *.res schreiben aber ich habe die Befürchtung, dass die RAM-nutzung meines PRojekts bzw. der fertigen EXE am Ende mit steigender ANzahl Formen in die Höhe schiesst und möchte
dies nun verhindern! Aber wie?
MfG Roka
jojo-sp - Mi 27.10.04 14:43
Wenn du Bilder in Delphi auf ein image lädst, liegen diese Bilder im Arbeitsspeicher und füllen ihn daher.
Da ich aus deiner Beschreibung nicht ganz schlau geworden bin, habe ich auch keine Lösung parat.
roka6803 - Mi 27.10.04 18:25
hallo jojo,
vielen dank für diesen hinweis. auf alle fälle habe ich das mit dem *res dingens probiert bringt nichts. mein zweiter versuch bestand darin die pics dynamisch in jede form zu laden (über formcreate) usw.. habe dann aber festgestellt, dass die exe dann noch mehr ram frisst. hast du ne ahnung wieso ?
F34r0fTh3D4rk - Mi 27.10.04 19:34
vielleicht sollten die bilder nur dann geladen werden,wenn sie gebraucht
werden bzw wenn sie sichtbar sind, ansonsten sollten sie wieder raus.
Aton - Do 28.10.04 10:00
Hast du schon probiert unter "Projekt/Optionen/Formulare" die Formulare verfügbar zu machen? Dann werden sie nicht automatisch erzeugt, und du kannst sie bei Bedarf mit
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| Form1 := TForm1.Create(Self); try Form1.ShowModal; finally Form1.Release; end; |
im RAM erzeugen.
Gruß Jens.
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.
jasocul - Do 28.10.04 10:12
imho sind die Bilder aber immer noch in der EXE drin.
Ich würde bei der großen Zahl von Bildern, überhaupt keine Bilder direkt einbinden. Die Bilder sollten als separate Dateien zur Laufzeit geladen werden.
Delete - Do 28.10.04 10:35
jasocul hat folgendes geschrieben: |
imho sind die Bilder aber immer noch in der EXE drin. |
Worum geht es jetzt? Um die Größe der Exe-Datei oder den Speicherbedarf im Arbeitsspeicher, wenn sie läuft?
jasocul - Do 28.10.04 11:13
ich bin mit der speicherbelastung einer exe nicht so gut vertraut, aber wird die nicht zu 100% in den Speicher geladen? Wenn dann die Bilder direkt in der exe hinterlegt sind, dann wird der Speicher doch auch entsprechend belastet, oder?
Erklär mal Luckie. Ich lerne gern was dazu.
Moritz M. - Do 28.10.04 11:18
Eine EXE wird beim Start komplett in den RAM geladen. Deswegen ist es empfehlenswert die Bilder und Resourcen auszulagern.
Gruß
jojo-sp - Do 28.10.04 11:33
Musst du denn für jedes Image ne eigene Form haben? Wäre es nicht einfacher alle Bilder die in einem Ordner sind, in einer stringlist mit der Pfadangabe zu speichern und bei Bedarf dieses auf dem Image in "Form1" darzustellen?
Moritz M. - Do 28.10.04 11:35
Nein, wieso? Du lädst das Image aus einer externen Datei in ein TImage o.Ä.
jojo-sp - Do 28.10.04 11:40
Meine Frage war falsch Formuliert: Wozu müssen es denn so viele Forms sein?
Delete - Do 28.10.04 12:23
Nein, eine Anwendung wird nicht komplett in den Speicher geladen. Die Teile, die nicht gebraucht werden, werden erst nachgeladen, wenn sie gebraucht werden. Es sei denn man hebelt das Speichermanagment von Windows mit Exe-Packern oder der Gleichen aus.
jasocul - Do 28.10.04 12:46
@Luckie:
Da scheint es verschiedene Ansichten zu geben (siehe Moritz).
Hast du eine Quelle, wo man sich informieren kann?
Oder wollen wir da mal in einem eigenen Topic diskutieren?
roka6803 - Do 28.10.04 13:12
Hallo Leute,
also wie ich das verstanden habe werden alle benutzen formen in den speicher geschrieben. mein problem ist jetzt aber das ich die formen wenn ich sie schliesse nur hide und nicht ganz schliesse um die dort gemachten einstellungen in edits o.ä. zu behalten und nicht verloren gehen.
Wenn ich die formen zu den berechnungen schliesse ist zawr der speicher entlastet aber die daten sind weg. Wie kann ich also eine form schliessen, sodass der speicher entlastet wird die eingegebenen informationen aber erhalten bleiben um auch in anderen formen verfügbar zu sein.
p.s. : die größe der exe ist erstmal unwichtig
AndyB - Do 28.10.04 13:28
roka6803 hat folgendes geschrieben: |
nur hide und nicht ganz schliesse um die dort gemachten einstellungen in edits o.ä. zu behalten und nicht verloren gehen. |
Da würde ich sagen, dass du ein falsches Design hast. Man sollte die Daten und die Oberfläche voneinander trennen und nicht die Daten in der Oberfläche halten. Dann passiert einem sowas schon gleich gar nicht.
Motzi - Do 28.10.04 13:35
jasocul hat folgendes geschrieben: |
@Luckie:
Da scheint es verschiedene Ansichten zu geben (siehe Moritz).
Hast du eine Quelle, wo man sich informieren kann?
Oder wollen wir da mal in einem eigenen Topic diskutieren? |
Alle EXE und DLL-Files werden von Windows als MMF (Memory Mapped Files) geladen. Dh. es wird immer nur der gerade benötigte Teil der Datei von der Festplatte in den Arbeitsspeicher gemappt...
F34r0fTh3D4rk - Do 28.10.04 15:52
müssen die ganzen bilder denn in die exe rein ?
ich mein, DAS wird ne exe :)
roka6803 - Do 28.10.04 16:53
das proggy ist als Diablo 2 Skill Calculator gedacht (und zwar für alle Charakterklassen!!!).
die bilder stellen die "Skills" eines Charakters dar sodass man diese aus dem Spiel heraus wiedererkennen kann.
und da pro Charakterklasse an die 30 solcher Skillbilder anfallen summiert sich das ganze schon ein bisschen hoch.
aber meine letzte Frage war vielleicht ein bisschen zu kompliziert gestellt. wie kann ich die in einer Form eingegebenen Daten aus edits, usw. sichern wenn ich die form "close"???
MfG Robin
ps die bilder werden jetzt bereits dynamisch geladen und liegen nicht mehr in der exe!!!
F34r0fTh3D4rk - Fr 29.10.04 15:00
ey das prog brauch ich auch !!!
Also Leute, ranhalten witr müssen ihm helfen !!! :)
highhatcompy - Fr 29.10.04 15:47
Hallo,
wenn du alle Einstellungen einer Form sichern willst, dann nutze doch einen Memorystream. Da gibt es die Möglichkeit komplette Komponénten(Form) zu speichern.
MfG
Highhatcompy
roka6803 - Sa 30.10.04 13:17
wie funzt das ??? MfG Roka
roka6803 - Sa 30.10.04 13:23
F34r0fTh3D4rk hat folgendes geschrieben: |
ey das prog brauch ich auch !!!
Also Leute, ranhalten witr müssen ihm helfen !!! :) |
Aha, da hat jemand Interesse!!! Gut! Nur das "biggest" Problem sind die ALgorithmen, quatsch was sag ich die, die Terme zur Skillberechnung herauszufinden und zu programmieren. Hast du da villeicht ne Abhilfe ??? MfG Roka
F34r0fTh3D4rk - Sa 30.10.04 20:25
ich hab erstmal noch kein richtigen plan aber mal gucken was ich finde
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!