2013-07-09 5 views
5

Ich weiß, das Wissen unter:Was ist der Unterschied zwischen einer kurzen schwachen Referenz und einer langen schwachen Referenz?

Ein schwacher Verweis ermöglicht die Garbage Collector das Objekt zu sammeln, während nach wie vor die Anwendung ermöglicht das Objekt zuzugreifen.

Wenn das Objekt also zurückgewonnen wurde, müssen Sie es bei Bedarf erneut erstellen.

Was ist der Unterschied zwischen einer kurzen schwachen Referenz und einer langen schwachen Referenz? Ich denke, es wie folgt: (nach dem Msdn)

kurze schwache Referenz: wenn GC das Objekt zurückzugewinnen, das Objekt wirklich freigegeben.

lange schwache Referenz: Wenn GC das Objekt zurückfordert, ist das Objekt immer noch vorhanden (wie es zwischengespeichert wird).

So kann mir jemand sagen, mehr Details?

+1

es ist gut hier erklärt: http://stackoverflow.com/questions/310685/weak-references –

Antwort

5

Short

Das Ziel einer kurzen schwachen Referenz wird null, wenn das Objekt von der Garbage Collection freigegeben wird. Die schwache Referenz ist selbst ein verwaltetes Objekt und unterliegt der Garbage Collection genau wie jedes andere verwaltete Objekt. Eine kurze schwache Referenz ist der Standard Konstruktor für WeakReference.

Lange

Eine lange schwache Referenz nach der Finalisierung Methode des Objekts beibehalten wird genannt worden ist. Dadurch kann das Objekt neu erstellt werden, aber der Zustand des Objekts bleibt unvorhersehbar. Um eine lange Referenz zu verwenden, geben Sie true im WeakReference-Konstruktor an.

Wenn der Typ des Objekts keine Finalize-Methode haben, die kurze schwache Referenz Funktionalität gilt und die schwache Referenz gilt nur , bis das Ziel gesammelt wird, die jederzeit auftreten können, nachdem die Finalizerthread ausgeführt wird.

Um eine starke Referenz zu erstellen und das Objekt erneut zu verwenden, übergeben Sie die Target-Eigenschaft eines WeakReference an den Objekttyp. Wenn die Target-Eigenschaft null zurückgibt, wurde das Objekt gesammelt. Andernfalls können Sie weiterhin das Objekt verwenden, da die Anwendung einen starken Verweis darauf zurückgewonnen hat.

Richtlinien für die Verwendung schwache Verweise

Verwenden lange schwache Verweise nur bei Bedarf, wie sich der Zustand des Objekts unvorhersehbar nach Finalisierung ist. Vermeiden Sie schwache Referenzen auf kleine Objekte, da der Zeiger selbst so groß sein kann oder größer.

Vermeiden Sie schwache Referenzen als automatische Lösung für Speicher Management-Probleme. Entwickeln Sie stattdessen eine effektive Caching-Richtlinie für , die die Objekte Ihrer Anwendung behandelt.

Reference

+0

ich schon diesen Artikel bekannt, aber meine Frage ist, ob GC das Objekt zurückzugewinnen, das Objekt gibt es noch ??? –

+1

Ich frage mich, warum dieses Dokument so schlecht beschreibt, was eigentlich vor sich geht? Eine kurze schwache Referenz wird entweder ungültig, wenn ihr Ziel für eine sofortige Finalisierung in Frage kommt oder nicht mehr existiert, oder wenn die schwache Referenz * selbst * für die Finalisierung in Frage kommt. Eine lange schwache Referenz wird ungültig, wenn ihr Ziel nicht mehr existiert oder wenn die schwache Referenz selbst für die Finalisierung in Frage kommt. Beachten Sie, dass schwache Referenzen auch dann ungültig gemacht werden können, wenn ihre Ziele aktiv sind - ein Punkt, der in der Dokumentation nicht erwähnt wird! – supercat