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.
OutSystems-Studie: 62 Prozent der Befragten haben Sicherheits- und Governance-Bedenken bei Softwareentwicklung mit KI-Unterstützung.
Der Cybersecurity Report von Hornetsecurity stuft 2,3 Prozent der Inhalte gar als bösartig ein. Die…
Die Hintermänner haben es auf Zugangsdaten zu Microsoft Azure abgesehen. Die Kampagne ist bis mindestens…
Cloud-Plattform für elektronische Beschaffungsprozesse mit automatisierter Abwicklung elektronischer Rechnungen.
Mindestens eine Schwachstelle erlaubt eine Remotecodeausführung. Dem Entdecker zahlt Google eine besonders hohe Belohnung von…
Nur rund die Hälfte schaltet während der Feiertage komplett vom Job ab. Die anderen sind…