Arbeitsspeicher leeren (FreeMem)

Hallo,

ich möchte in meinem Script „FreeMem = Space(32000000)“ im VB Script ausführen, damit mein Arbeitsspeicher geleert wird. Weiß jemand wie das geht oder wie ich sonst den Arbeitsspeicher löschen könnte? Momentan nutze ich FreeMem in einer VisualBasic-Script-Datei zum Löschen des Arbeitsspeicher, also muss es doch auch möglich sein mittels eines Shell-Befehl dieses auszuführen, oder?

Vielen Dank

Gegenfrage
Hallo,

die Frage wurde schon mal gestellt, deshalb trau ich mich jetzt mal zurück zu fragen, … wozu?

Daß es bei C-Programmen die Gefahr von Speicherlecks gibt, wenn man Fehler macht, weiß ich. Da hilft das aber dann wohl auch nicht.
VB-Programme geben nicht mehr benötigten Arbeitsspeicher an das System zurück, Zugriffe auf den Arbeitsspeicher sind wegen Multitasking ohnehin nicht sinnvoll, ob sie mit VB möglich sind, weiß ich nicht.
Wozu dann den RAM bearbeiten?

Ich hoffe, Du kannst mir das erklären.

Gruß, Rainer

Hallo Rainer,
ich habe nicht direkt ein VB-Programm sondern ich schreibe ein Testscript für einen automatisierten Test, und nutze dafür ein Testtool. Dieses lässt unterschiedliche Programmiersprachen zu - und ich nutze eben VB. Mein Testscript bricht nach einiger Zeit ab, da der verfügbare Arbeitsspeicher zu klein geworden ist, daher muss ich diesen irgenwie vorher löschen.

Danke und Gruß
Jackie

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Jackie,

ich habe nicht direkt ein VB-Programm sondern ich schreibe ein
Testscript für einen automatisierten Test, und nutze dafür ein
Testtool. Dieses lässt unterschiedliche Programmiersprachen zu

  • und ich nutze eben VB. Mein Testscript bricht nach einiger
    Zeit ab, da der verfügbare Arbeitsspeicher zu klein geworden
    ist, daher muss ich diesen irgenwie vorher löschen.

ich versteh’s immer noch nicht ganz, sorry.
Wird nicht mehr benötigter Arbeitsspeicher denn nicht automatisch wieder frei gegeben? (Von fehlerhaften Programmen mal abgesehen)

Gruß, Rainer

ich versteh’s immer noch nicht ganz, sorry.
Wird nicht mehr benötigter Arbeitsspeicher denn nicht
automatisch wieder frei gegeben? (Von fehlerhaften Programmen
mal abgesehen)

Gruß, Rainer

Naja, vielleicht kann mich ja jemadn anderes verstehen. Mein Testscript wird unterbrochen sobald mein Speicher unter 50MB kommt. Muss ich wohl nach einer anderen Lösung suchen.

Hi Jackie,

Naja, vielleicht kann mich ja jemadn anderes verstehen. Mein
Testscript wird unterbrochen sobald mein Speicher unter 50MB
kommt. Muss ich wohl nach einer anderen Lösung suchen.

meine Frage hatte mir Deinem Problem ja auch gar nicht so viel zu tun. :wink: Ich wollte nur verstehen, wo es nützlich sein kann, den Arbeitsspiecher mit einem Programm explizit zu löschen.
Die Lösung Deines Problems wird dabei ja nicht behindert. Die Experten lesen ohnehin das UP und antworten unabhängig von meiner Frage.
Ich darf also ruhig etwas lernen, wenn jemand Dein Problem lösen kann, wird er das posten.

Gruß, Rainer

ich möchte in meinem Script „FreeMem = Space(32000000)“ im VB
Script ausführen, damit mein Arbeitsspeicher geleert wird.
Weiß jemand wie das geht oder wie ich sonst den
Arbeitsspeicher löschen könnte? Momentan nutze ich FreeMem in
einer VisualBasic-Script-Datei zum Löschen des
Arbeitsspeicher, also muss es doch auch möglich sein mittels
eines Shell-Befehl dieses auszuführen, oder?

Hallo
Du hast wahrscheinlich einen Fehler in Deinem Programm, den wir so nicht finden können.
Lösche alle in Frage kommenden Variablen, und dann wird der vom VB beanspruchte Speicher wieder frei sein.
Es kann auch sein, das Objekte oder Funtionen zu oft instanziert wurden. Das muß dann vermieden oder beendet werden.
Du kannst ja auch mal ausprobieren, wieviel Speicher Du überhaupt mit VB-Script bekommst. Strings oder Datenfelder bitte auch wieder löschen.
Das VB organisiert den Speicher ganz gut, klappt normalerweise gut.
Es sollte schwer fallen, den normalen Speicher mit einem einfachem Programm zu überschreiten.
MfG
Matthias

Hallo Jackie,

also mal folgendes. Jedes programm benutzt Variablen. Diese legt sie im Ram und danach in der Auslagerungsdatei ab.
Rufst du eine prozedure auf und deklarierst dort eine variable. In VB mit Dim , so wird diese im Speicher abgelegt. Verlaesst du die prozedure wird sie automatisch aus dem Speicher entfernt.
Deklarierst du sie aber als Static so bleibt sie erhalten. Das selbe ist wenn du eine Variable als Puplic declarierst.
Diese Variablen werden erst bei programmende aus dem Speicher entfernt.

Desweiteren werden saemtlich geladene DLL’s in den RAM geladen. Diese werden jedoch nicht entfernt! Jede Klasse die du registrierst wird im RAM abgelegt!

Ich tippe mal stark darauf das du DLL’s laedst bis der Speicher voll ist und du dann die Fehlermeldung bekommst :frowning:

Da ich nicht weiss welches OS du nutzt gehe ich mal von XP aus.
Probiere mal folgendes.

Lege in der registry unter „HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ Windows\CurrentVersion\Explorer“ folgenden Wert REG_SZ an

„AlwaysUnloadDLL“ Diesen Schluessel weisst du aber keinen Wert zu.
Dann starte mal den Rechner neu. Somit werden nicht mehr genutze DLL’s aus dem Speicher entfernt. Sollte dies nichts nuetzen so erhöhe mal deine Auslagerungsdatei.

Einen direkten Weg um den Ram zu löschen / Manipulieren unter VB kenne ich nicht.

MFG Alex

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo
Es ist doch so, dass DLL Dateien in den Speicherbereich geschrieben werden. Damit wird die Zugriffszeit auf die DLL’s verkürzt, was wiederum bewirkt, dass das Programm schneller Läuft. Wenn ich jetzt also hingehen und gigantische Routinen in das Ram Lade, stösste es irgenwann mal an eine Grenze. In C++ gibt es hierfür die LoadHI und die UnloadHI (oder so ähnlich) anweisung. Mit dieser werden sämtliche gewünschten Daten aus dem Speicher genommen.
Benötigt das Programm die Daten wieder von neuem, dann müssen sie von der HD neu eingelesen werden, was einer längeren Zugriffszeit entspricht.
Erlich gesagt, weiss ich nocht ob es heute noch sinnvoll ist so kleine DLL-Dateichen von ein paar Kilo aus dem Ram zu werfen, nebstdem ich der Meinung bin, das VBA recht gut den Speicher verwaltet.

MFG Sebastian

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]