Markieren Sie das Kontrollkästchen Englisch, um die englische Version dieses Artikels anzuzeigen. Sie können den englischen Text auch in einem Popup-Fenster einblenden, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Weak References

 

Der Garbage Collector kann kein Objekt sammeln, das von einer Anwendung verwendet wird, während der Anwendungscode dieses Objekt erreichen kann. Dies wird als starker Verweis der Anwendung auf das Objekt bezeichnet.

Bei einem schwachen Verweis kann der Garbage Collector das Objekt sammeln, während die Anwendung nach wie vor auf das Objekt zugreifen kann. Ein schwacher Verweis ist nur während der unbestimmten Zeitspanne gültig, bis das Objekt gesammelt ist, 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 wiedererstellt werden können, wenn sie von der Garbage Collection freigegeben werden.

Angenommen, in der Strukturansicht einer Windows Forms-Anwendung wird für den Benutzer eine komplexe hierarchische Optionsauswahl dargestellt. Wenn die zugrunde liegenden Daten umfangreich sind, ist es ineffizient, die Strukturansicht im Speicher zu behalten, wenn der Benutzer mit einem anderen Teil der Anwendung beschäftigt ist.

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

Um einen schwachen Verweis auf ein Objekt zu erstellen, erstellen Sie mit der Instanz des zu verfolgenden Objekts einen WeakReference. Sie legen dann die Target-Eigenschaft für dieses Objekt fest und legen den ursprünglichen Verweis auf das Objekt auf null fest. Ein Codebeispiel finden Sie unter WeakReference in der Klassenbibliothek.

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

  • Short

    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 Standardkonstruktor für WeakReference.

  • Long

    Ein langer schwacher Verweis wird beibehalten, nachdem die Finalize-Methode des Objekts aufgerufen wurde. Dadurch kann das Objekt neu erstellt werden, aber der Zustand des Objekts bleibt unvorhersehbar. Um einen langen Verweis zu verwenden, geben Sie true im WeakReference-Konstruktor an.

    Wenn der Objekttyp keine Finalize-Methode besitzt, werden die Funktionen des kurzen schwachen Verweises angewendet, und der schwache Verweis ist nur so lange gültig, bis das Ziel gesammelt wurde, was nach der Ausführung des Finalizers jederzeit möglich ist.

Um einen starken Verweis zu erstellen und das Objekt erneut zu verwenden, wandeln Sie die Target-Eigenschaft eines WeakReference in den Typ des Objekts um. Wenn die Target-Eigenschaft null zurückgibt, wurde das Objekt gesammelt. Andernfalls können Sie das Objekt weiterhin verwenden, weil die Anwendung einen starken Verweis darauf wiederhergestellt hat.

Verwenden Sie lange schwache Verweise nur wenn notwendig, da der Zustand des Objekts nach Abschluss unvorhersehbar ist.

Vermeiden Sie, schwache Verweise auf kleine Objekte zu verwenden, da der Zeiger selbst möglicherweise genauso groß oder größer ist.

Vermeiden Sie, schwache Verweise als automatische Lösung für Speicherverwaltungsprobleme zu verwenden. Entwickeln Sie stattdessen eine wirksame Cachingrichtlinie für die Behandlung von Objekten der Anwendung.

Anzeigen: