Aufräumarbeiten – alle Formulare aus dem Speicher entfernen

Wenn ein Visual Basic 6-Programm beendet wird, sollten Benutzerformulare per Unload aus dem Arbeitsspeicher entfernt werden. Visual Basic erledigt dies nicht automatisch, daher ist es durchaus möglich, dass bei einem Programm mit vielen Formularen das eine oder andere noch im Speicher verbleibt, nachdem das Programm beendet wurde.

Die Methode Hide eines Formulars aufzurufen oder die Eigenschaft Visible auf False zu setzen, entfernt das Formular nicht aus dem Speicher. Selbst wenn man ein Formular mithilfe der Prozedur Unload explizit aus dem Speicher entfernt, kann es immer noch Ressourcen beanspruchen, solange die Referenz auf das Formular nicht auf Nothing gesetzt wurde. Dieser Tipp zeigt, wie man sicherstellt, dass alle Formulare eines Programms aus dem Speicher entfernt und bei Beendigung des Programms alle Ressourcen wieder freigegeben werden.

Diese Technik nutzt die Tatsache aus, dass eine VB-Anwendung über eine globale Forms-Collection verfügt, deren Elemente alle geladenen Formulare der Anwendung repräsentieren.

Diese Collection könnte man in einer Schleife durchlaufen und alle Formulare wie im folgenden Codeschnipsel per Unload aus dem Speicher entfernen:


Dim f As Form
For Each f In Forms
Unload f
Set f = Nothing
Next f

Dieser direkte Ansatz bringt allerdings ein Problem mit sich: Wenn man diesen Code von einer Prozedur aus ausführt, funktioniert alles bestens. Aber wenn man ihn von der Ereignisprozedur Form_Unload des Hauptformulars aus aufruft, wird er versuchen, das Hauptformular aus dem Speicher zu entfernen, welches gerade dabei ist, aus dem Speicher entfernt zu werden (sonst wäre die Ereignisprozedur Form_Unload ja nicht ausgelöst worden). Hier eine Möglichkeit, wie man dieses potenzielle Problem vermeiden kann:


Public Sub UnloadAllForms(Optional FormToIgnore _
As String = "")
Dim f As Form
For Each f In Forms
If f.Name  FormToIgnore Then
Unload f
Set f = Nothing
End If
Next f
End Sub

Diese Prozedur kann man folgendermaßen von der Ereignisprozedur Form_Unload des Hauptformulars aus aufrufen lassen:


UnloadAllFormsMe.Name

Die Prozedur entfernt alle Formulare außer dem Hauptformular aus dem Speicher. Falls man sie von einer separaten Prozedur aus aufruft, gibt man einfach kein Argument an und die Prozedur entfernt sämtliche Formulare des Programms aus dem Speicher.

ZDNet.de Redaktion

Recent Posts

Studie: Ein Drittel aller E-Mails an Unternehmen sind unerwünscht

Der Cybersecurity Report von Hornetsecurity stuft 2,3 Prozent der Inhalte gar als bösartig ein. Die…

26 Minuten ago

HubPhish: Phishing-Kampagne zielt auf europäische Unternehmen

Die Hintermänner haben es auf Zugangsdaten zu Microsoft Azure abgesehen. Die Kampagne ist bis mindestens…

17 Stunden ago

1. Januar 2025: Umstieg auf E-Rechnung im B2B-Geschäftsverkehr

Cloud-Plattform für elektronische Beschaffungsprozesse mit automatisierter Abwicklung elektronischer Rechnungen.

21 Stunden ago

Google schließt schwerwiegende Sicherheitslücken in Chrome 131

Mindestens eine Schwachstelle erlaubt eine Remotecodeausführung. Dem Entdecker zahlt Google eine besonders hohe Belohnung von…

22 Stunden ago

Erreichbarkeit im Weihnachtsurlaub weiterhin hoch

Nur rund die Hälfte schaltet während der Feiertage komplett vom Job ab. Die anderen sind…

2 Tagen ago

Hacker missbrauchen Google Calendar zum Angriff auf Postfächer

Security-Experten von Check Point sind einer neuen Angriffsart auf die Spur gekommen, die E-Mail-Schutzmaßnahmen umgehen…

3 Tagen ago