Aufräumarbeiten – alle Formulare aus dem Speicher entfernen

Ordnungsgemäß geschriebener Code verlangt, dass beim Beenden eines Visual Basic-Programms alle Formulare aus dem Speicher entladen und gelöscht werden. Diese Anleitung soll helfen, Code entsprechend einzusetzen.

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.

Themenseiten: Anwendungsentwicklung, Software

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Aufräumarbeiten – alle Formulare aus dem Speicher entfernen

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *