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.
Neueste Kommentare
Noch keine Kommentare zu Aufräumarbeiten – alle Formulare aus dem Speicher entfernen
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.