Freigeben über


Schwache Verweise

Der Garbage Collector kann ein Objekt, das von einer Anwendung verwendet wird, nicht einsammeln, solange der Code der Anwendung dieses Objekt erreichen kann. Die Anwendung soll einen starken Verweis auf das Objekt haben.

Ein schwacher Verweis ermöglicht es dem Garbage Collector, das Objekt zu sammeln, während die Anwendung weiterhin auf das Objekt zugreifen kann. Ein schwacher Verweis ist nur während der unbestimmten Zeitspanne gültig, bis das Objekt erfasst wird, wenn keine starken Verweise vorhanden sind. Wenn Sie einen schwachen Verweis verwenden, kann die Anwendung immer noch einen starken Verweis auf das Objekt erhalten, sodass es nicht gesammelt werden kann. Es besteht jedoch immer das Risiko, dass der Garbage Collector das Objekt zuerst erreicht, bevor ein starker Verweis erneut hergestellt wird.

Schwache Verweise sind hilfreich für Objekte, die viel Speicher belegen, aber leicht wieder erstellt werden können, wenn sie von der Garbage Collection freigegeben werden.

Angenommen, eine Strukturansicht in einer Windows Forms-Anwendung zeigt eine komplexe hierarchische Auswahl von Optionen für den Benutzer an. Wenn die zugrunde liegenden Daten groß sind, ist das Beibehalten des Baums im Arbeitsspeicher ineffizient, wenn der Benutzer mit etwas anderem in der Anwendung beschäftigt ist.

Wenn der Benutzer zu einem anderen Teil der Anwendung wechselt, können Sie die WeakReference Klasse verwenden, um einen schwachen Verweis auf die Struktur zu erstellen und alle starken Verweise zu zerstören. Wenn der Benutzer wieder zur Strukturansicht zurückwechselt, versucht die Anwendung, einen starken Verweis auf die Strukturansicht zu erhalten und vermeidet, wenn dies gelingt, eine Neuerstellung der Strukturansicht.

Um einen schwachen Verweis mit einem Objekt herzustellen, erstellen Sie eine WeakReference Mithilfe der Instanz des Objekts, das nachverfolgt werden soll. Ein Codebeispiel finden Sie in WeakReference der Klassenbibliothek.

Kurze und lange schwache Verweise

Sie können einen kurzen schwachen Bezug oder einen langen schwachen Bezug erstellen:

  • Kurz

    Das Ziel eines kurzen schwachen Verweises wird null, wenn das Objekt von der Garbage Collection freigegeben wird. Der schwache Verweis ist selbst ein verwaltetes Objekt und unterliegt wie jedes andere verwaltete Objekt der Garbage Collection. Ein kurzer schwacher Verweis ist der parameterlose Konstruktor für WeakReference.

  • Lang

    Ein langer schwacher Verweis wird beibehalten, nachdem die Finalize-Methode des Objekts aufgerufen wurde. Dadurch kann das Objekt neu erstellt werden, der Zustand des Objekts bleibt jedoch unberechenbar. Wenn Sie einen langen Verweis verwenden möchten, geben Sie true im WeakReference Konstruktor an.

    Wenn der Objekttyp nicht über eine Finalize Methode verfügt, gilt die kurze schwache Verweisfunktion und der schwache Verweis ist nur gültig, bis das Ziel erfasst wird. Dies kann jederzeit erfolgen, nachdem der Finalizer ausgeführt wurde.

Um einen starken Verweis herzustellen und das Objekt erneut zu verwenden, wandeln Sie die Target Eigenschaft eines WeakReference Objekts in den Typ des Objekts um. Wenn die Target Eigenschaft zurückgegeben nullwird, wurde das Objekt erfasst. Andernfalls können Sie das Objekt weiterhin verwenden, da die Anwendung wieder einen starken Verweis darauf erhalten hat.

Richtlinien für die Verwendung schwacher Verweise

Verwenden Sie lange schwache Verweise nur, wenn dies erforderlich ist, da der Zustand des Objekts nach abschluss der Fertigstellung unvorhersehbar ist.

Vermeiden Sie schwache Verweise auf kleine Objekte, da der Zeiger selbst so groß oder größer sein kann.

Vermeiden Sie schwache Verweise als automatische Lösung für Speicherverwaltungsprobleme. Entwickeln Sie stattdessen eine effektive Zwischenspeicherungsrichtlinie zum Behandeln der Objekte Ihrer Anwendung.

Siehe auch