Gyenge hivatkozások

A szemétgyűjtő nem gyűjthet egy alkalmazás által használt objektumot, amíg az alkalmazás kódja eléri az objektumot. Az alkalmazás állítólag erős hivatkozással rendelkezik az objektumra.

A gyenge referencia lehetővé teszi, hogy a szemétgyűjtő összegyűjtse az objektumot, miközben az alkalmazás továbbra is hozzáférhet az objektumhoz. A gyenge hivatkozás csak határozatlan ideig érvényes, amíg az objektumot nem gyűjti össze, ha nincsenek erős hivatkozások. Gyenge referenciák használata esetén az alkalmazás továbbra is erős hivatkozást kaphat az objektumra, ami megakadályozza a gyűjtését. Azonban mindig fennáll annak a kockázata, hogy a szemétgyűjtő először az objektumhoz jut, mielőtt egy erős hivatkozás újra létrejön.

A gyenge hivatkozások olyan objektumok esetében hasznosak, amelyek sok memóriát használnak, de könnyen újra létrehozhatók, ha a szemétgyűjtés visszanyeri őket.

Tegyük fel, hogy egy Windows Forms-alkalmazásban egy fanézet összetett hierarchikus választási lehetőségeket jelenít meg a felhasználó számára. Ha a mögöttes adatok nagyok, a fa memóriában tartása nem hatékony, ha a felhasználó valamilyen más dologgal van kapcsolatban az alkalmazásban.

Amikor a felhasználó az alkalmazás egy másik részére vált, az WeakReference osztály használatával gyenge hivatkozást hozhat létre a fára, és megsemmisítheti az összes erős hivatkozást. Amikor a felhasználó visszavált a fára, az alkalmazás megpróbál erős hivatkozást szerezni a fára, és ha sikeres, elkerüli a fa rekonstruálását.

Ha gyenge hivatkozást szeretne létrehozni egy objektummal, hozzon létre egy WeakReference , a nyomon követni kívánt objektumpéldányt. A kód például az osztálytárban található WeakReference .

Rövid és hosszú gyenge hivatkozások

Létrehozhat egy rövid gyenge hivatkozást vagy egy hosszú gyenge hivatkozást:

  • Rövid

    A rövid gyenge referencia célja akkor lesz null , ha az objektumot szemétgyűjtéssel visszanyeri. A gyenge hivatkozás maga egy felügyelt objektum, és ugyanúgy szemétgyűjtésnek van kitéve, mint bármely más felügyelt objektum. A rövid gyenge referencia a paraméter nélküli konstruktor a WeakReference.

  • Hosszú

    Az objektum metódusának meghívása Finalize után a hosszú gyenge hivatkozás megmarad. Ez lehetővé teszi az objektum újbóli létrehozását, de az objektum állapota kiszámíthatatlan marad. Ha hosszú referenciát szeretne használni, adja meg true a WeakReference konstruktorban.

    Ha az objektum típusa nem rendelkezik metódussal Finalize , a rövid gyenge referenciafunkció érvényes, és a gyenge referencia csak a cél gyűjtéséig érvényes, ami a véglegesítő futtatása után bármikor előfordulhat.

Erős hivatkozás létrehozásához és az objektum ismételt használatához állítsa az Target objektum WeakReference tulajdonságát az objektum típusára. Ha a Target tulajdonság visszatér null, az objektum összegyűjtve lett, ellenkező esetben továbbra is használhatja az objektumot, mert az alkalmazás ismét erős hivatkozást kapott rá.

Útmutató gyenge hivatkozások használatához

Csak akkor használjon hosszú gyenge hivatkozásokat, ha szükséges, mivel az objektum állapota a véglegesítés után kiszámíthatatlan.

Ne használjon gyenge hivatkozásokat a kis objektumokra, mert maga a mutató mérete vagy mérete is lehet.

Ne használjon gyenge hivatkozásokat automatikus megoldásként a memóriakezelési problémákra. Ehelyett dolgozzon ki egy hatékony gyorsítótárazási szabályzatot az alkalmazás objektumainak kezelésére.

Lásd még