Programm ram schonender

DaRula

Erfahrenes Mitglied
nabend,
ich habe ein grundsätzliches Problem mit meinen Anwendungen. Sie verbrauchen zu viel RAM. An sich ist es nicht schlimm, wenn diese anwendung dann aber im hintergrund ist, soll sie auch nicht mehr tun, als sie tun muss. Gibt es Grundsätzliche Regeln, an die man sich halten sollte, wenn man eine Anwendung in den Tray steckt? Meine ANwendung soll z.B. nur alle x Minuten agieren, wenn sie minimiert ist. Was sind sachen die man rausnhemen sollte. Jetzt nciht nur bei meiner anwendung, sondern grundsätzlich?

euer Lineal
 
Man kann doch nicht generell sagen, was aus einem Programm rausgelassen werden kann. Das kommt doch immer ganz speziell auf dein Programm an.
Wenn man sagt, lass übergroße Array raus, kann es doch gur möglich sein, dass du genau dieses übergroße Array brauchst, dass dein Programm überhaupt läuft.

Was mir vielleicht einfallen würde, ich weiß aber nicht in wie weit das wirklich was bringt hinsichtlich RAM (und erst recht nicht bei dir), wäre die Geschichte der Paramenterübergabe (by ref/by val).

Ansonsten denke ich, dass man da nichts pauschalisieren sollte. Versuch einfach mit so wenig Variablen wie möglich auszukommen.

P.S.: Berichtigt mich, wenn ich jetzt total falsch liegen sollte. :(
 
Controls fressen viel Platz

Das ist vollkommen richtig. Arrays benötigen viel Platz. Bei der heutigen Rechnergeneration sollte man sich daran jedoch nicht stören. Aber nur, wenn die Anzahl der Dimensionen und Elemente des Arrays übersichtlich bleibt.

Vergessen sollte man aber auch nicht, dass die Hauptresourcen von den Controls aufgefressen werden. Sprich Formulare und Eingabeelemente. Wer ein Formular mit über 100 Controls erstellt, der weiss was ich meine. Die Standardcontrols von VB sind dabei noch halbwegs verträglich. Sobald jedoch mittelmässig programmierte UDF-Controls (Benutzerdefinierte) eingesetzt werden, stösst man mit dem Teil schnell auf Probleme.

Resourcen können logischerweise auch durch Programmierfehler verschwendet werden. Gerade beim Einsatz von Timern übersieht der Progger gerne, dass sich ein rekursiver Aufruf eingeschlichen hat. Sprich im Timerabschnitt werden immer und immer wieder Funktionen von "sich selbst" aufgerufen. Das führt schnell oder langsam zu einem Speicherüberlauf.

PS: Parameterübergaben haben zwar Einfluss auf den Speicherverbrauch, doch nur kurz. Bei <ByRef> wird keine neue Variable, sondern nur ein Zeiger erstellt. Bei <ByVal> wird eine neue Variable in der Zielfunktion erstellt (quasi eine Kopie). Klar das hierbei <ByVal> schlechter abschneidet. Generell sollte man aber beachten, dass dieser Unterschied nicht relevant ist, weil der Sinn von <ByRef> und <ByVal> nicht in Speicheroptimierungen liegt.

PS: Mit den Variablen hast du vollkommen recht. Gerne werden (weils einfacher erscheint) Globale Variablen erstellt, die überall im Projekt sichtbar sind. Diese Variablen sind jedoch in 90% der Funktionen und Module garnicht notwendig. Sie vergeuden also Speicherplatz. Die Lösung sollte also sein, die Variablen nur dort zu erzeugen, wo sie auch benötigt werden - in den Funktionen selbst. Nach Beendigung der Funktion werden sie dann nämlich fein säuberlich vernichtet.
 
Zuletzt bearbeitet:
wenn ich Dich richtig verstehe, muss Dein Progi nur alle paar Minuten mal was tun?

Was ich machen würde, wenn ich Dein Problem lösen müsste.

Ich würde ein Programm schreiben, was nix anderes tut, als das grosse Hauptprogi, alle paar ;Minuten aufzurufen, dann frisst nämlich nur das Progi, was den aufruf macht, während der ganzen Zeit Resourcen, und das hungrige Progi wird sobald es ausgeführt wurde wieder beendet, und somit frisst es keine Resourcen mehr.
 
das, was da ausgeführt wird ist nur eine kleine funktion, die ne db öffnet, was rausnimmt und was minimales mit dem eintrag macht. Die Funktion selbst sollte eigentlich nicht so viels peicher brauchen. ich müsste halt das andere drumherum 'unloaden' und wieder laden, wann man die form wieder ausm tray holt
 
Hallo,

hier mal eine Aufstellung über den Speicherverbrau der Controls

Visual Basic Controls: USER Resource Byte Use

Form .......... 206 | FileListBox .... 160 | PictureClip ..... 72
MDIForm ....... 420 | Shape ............ 0 | SpinButton ...... 72
PictureBox ..... 90 | Line ............. 0 | SSCheck ......... 72
Label ........... 0 | Image ............ 0 | SSFrame ......... 80
TextBox ........ 76 | Data ............ 72 | SSOption ........ 72
Frame .......... 74 | Grid ............ 72 | SSCommand ....... 76
CommandButton .. 66 | OLE ............ 164 | SSPanel ......... 80
CheckBox ....... 76 | AniPushButton .. 170 | SSRibbon ........ 80
OptionButton ... 76 | CommonDialog ... 166 |
ComboBox ...... 136 | CrystalReport .. 166 |
ListBox ....... 160 | Gauge ........... 80 |
HScrollBar ..... 80 | Graph ........... 80 |
VScrollBar ..... 80 | MhState ......... 72 |
Timer .......... 72 | MSComm .......... 72 |
DriveListBox .. 160 | MaskEdBox ....... 76 |
DirListBox .... 160 | Outline ......... 82

Leider habe ich noch nicht alle Controls gefunden

ANI
 
Hi Xmas,

diese Liste habe ich bei MSDN Library - January 2000 ausgegraben. Bin darauf gestoßen, wo ich unter Memory / Resourcen gesucht habe.

ANI

:)
 
Zurück