Muss ich verwendete Objekt-Variablen auf Nothing setzen?

Aus DBWiki
Wechseln zu: Navigation, Suche

VBA verwendet sogenanntes "Reference Counting" (Referenzzählung), um festzustellen, ob eine Instanz eines Objekts verwendet wird.

Das bedeutet, dass in dem Moment, in dem eine Objekt-Variable ihren Gültigkeitsbereich (Scope) verliert, der Referenzzähler auf das referenzierte Objekt um den Wert 1 vermindert wird. Wird der Objektverweis einer anderen Variablen zugeordnet, wird der Referenzzähler um den Wert 1 erhöht.

Wenn der Zähler den Wert 0 erreicht, werden alle Objektressourcen des Objekts freigegeben. Eine lokale Methoden-Variable wird höchstwahrscheinlich ein Objekt referenzieren, dessen Referenzzähler nie größer als 1 ist, so dass Objektressourcen freigegeben werden, wenn die Methode endet.

Durch das Setzen einer Objekt-Variablen auf Nothing kann der Referenzzähler explizit verringert werden.

Zum Beispiel, wenn man eine Datei über das FileSystemObject einliest und die Objekt-Variable für das File-Objekt direkt nach dem ReadAll()-Aufruf auf Nothing setzt, wird das File-Objekt sofort freigegeben und man kann den eingelesenen Inhalt bearbeiten. Ansonsten erfolgt die Freigabe des File-Objekts erst dann, wenn die Methode verlassen wird und lebt somit länger, als es unbedingt erforderlich ist.

Wenn man sich aber nicht in einer solchen Situation befindet, in der man wertvolle Ressourcen sofort freisetzen muss, dann kann man auch die Variablen einfach aus ihrem Geltungsbereich (Scope) fallen lassen.

Wiki hinweis.png

Anmerkung: In der Vergangenheit wurde zumindest bei einigen älteren Access-Versionen beobachtet, dass nicht immer alle Resourssen freigegeben werden, wenn eine Objekt-Variable den Gültigkeitsbereich verliert. Dieser Fall kann dann eintreten, wenn beim Programmieren Zirkelbezüge von Objekten erstellt werden. Liegen solche Programmierfehler vor, dürfte (zumindest theoretisch) auch das Setzen einer Objekt-Variablen auf Nothing nicht zur angestrebten Freigabe von Ressourcen führen, sondern einem eher etwas vorgaukeln.


Weblinks