Speicherphänomen
-
Moin leude,
hab etwas (für mich verwirrendes) entdeckt.
Wenn man nur Designzeug im Programm hat ohne zusätzlichen Code und die Anwendung startet, besetzt es ca. 3 Kilobyte.So nun Minimiert man das Programm und stellt es wieder her. Jetzt hat es nur noch 1 Kilobyte Speicherverbrauch.
Bei der Minimierung passiert etwas was ich mir gerade nicht erkären kann...Möchte das gerne erkärt haben
-
Bist du sicher, dass du nicht MegaBytes meintest?
Auf jeden Fall ist das kein Phänomen, das allein für mit dem BCB erstellte Programme typisch wäre, davon sind offensichtlich alle Windows-Programme "betroffen".
Eine mit Quellen belegte Begründung habe ich momentan nicht zur Hand, deshalb nur eine populärwissenschaftliche Erklärung: beim Minimieren verschiebt Windows den Grossteil der Daten in die Swapdatei oder sonst irgendeinen Cache und hat so mehr Speicher für andere, aktive Anwendungen frei.
Beim Wiederherstellen wird der Speicher erst dann und nur in dem Umfang wieder belegt, wenn bzw. wie er durch Aufruf entsprechender Funktionen im Programm auch tatsächlich benötigt wird.Ich verschieb das mal nach "Rund um", vielleicht findet sich dort jemand, der dir die (meiner Meinung nach katastrophale) Speicherverwaltung von Windows genauer erklären kann.
-
Dieser Thread wurde von Moderator/in Jansen aus dem Forum Borland C++ Builder (VCL/CLX) in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Ohh ja sind ja Megabyte
Also danke erstmal.
Hab mal in mein OnCreate Ereignis einmal Minimize und dann Restore reingepackt, damit ist das Programm im Speicher schlanker. Kann man sowas machen?
-
Klar kannst du das machen, es ist aber Augenwischerei.
Das Programm benötigt dadurch nicht weniger Speicher als vorher, der Unterschied besteht lediglich darin, ob Platz im "echten" Speicher (RAM) oder im virtuellen Speicher (Swap-Datei) belegt wird.
Achte beim Minimieren des Programmes mal auf die Anzeige für den "zugesicherten Speicher" in der Statusleiste des Taskmanagers. Du wirst sehen, dass sich an der Gesamtsumme des belegten Speichers nichts ändert.
-
Vor allem ratterts dann ständig, da er alles neu von der Platte laden muss
-
hi,
versuch mal das im WM_CREATE, aber als letztes:
SetProcessWorkingSetSize(GetCurrentProcess(), -1, -1);
das sollte den prozessspeicher auf ein minimum begrenzen.
msp
-
Ja das funktioniert Prima. Danke
-
aua.
edit: besser, man ruft regelmäßig einen ram-defragmentierer auf. und immer symmentrische codeblöcke bauen, die lagern schneller aus. und bei sowas immer die festplatte entlüften, damit kein headcrash passiert.