Share via


Zwakke verwijzingen

De garbagecollector kan geen object verzamelen dat door een toepassing wordt gebruikt, terwijl de code van de toepassing dat object kan bereiken. De toepassing wordt gezegd een sterke verwijzing naar het object te hebben.

Met een zwakke verwijzing kan de garbagecollector het object verzamelen terwijl de toepassing nog steeds toegang heeft tot het object. Een zwakke verwijzing is alleen geldig tijdens de onbepaalde tijd totdat het object wordt verzameld wanneer er geen sterke verwijzingen bestaan. Wanneer u een zwakke verwijzing gebruikt, kan de toepassing nog steeds een sterke verwijzing naar het object verkrijgen, waardoor het niet kan worden verzameld. Er is echter altijd het risico dat de garbagecollector eerst bij het object komt voordat een sterke verwijzing opnieuw tot stand wordt gebracht.

Zwakke verwijzingen zijn nuttig voor objecten die veel geheugen gebruiken, maar kunnen eenvoudig opnieuw worden gemaakt als ze worden vrijgemaakt door garbagecollection.

Stel dat een structuurweergave in een Windows Forms-toepassing een complexe hiƫrarchische keuze van opties voor de gebruiker weergeeft. Als de onderliggende gegevens groot zijn, is het inefficiƫnt om de structuur in het geheugen te bewaren wanneer de gebruiker betrokken is bij iets anders in de toepassing.

Wanneer de gebruiker overschakelt naar een ander deel van de toepassing, kunt u de WeakReference klasse gebruiken om een zwakke verwijzing naar de structuur te maken en alle sterke verwijzingen te vernietigen. Wanneer de gebruiker terugschakelt naar de boomstructuur, probeert de toepassing een sterke verwijzing naar de boom te verkrijgen en, indien succesvol, vermijdt het reconstrueren van de boom.

Als u een zwakke verwijzing met een object tot stand wilt brengen, maakt u een WeakReference exemplaar van het object dat moet worden bijgehouden. Zie voor een codevoorbeeld WeakReference in de klassebibliotheek.

Korte en lange zwakke verwijzingen

U kunt een korte zwakke verwijzing of een lange zwakke verwijzing maken:

  • Kort

    Het doel van een korte zwakke verwijzing wordt null wanneer het object wordt vrijgemaakt door garbagecollection. De zwakke verwijzing is zelf een beheerd object en is onderworpen aan garbagecollection, net als elk ander beheerd object. Een korte zwakke verwijzing is de parameterloze constructor voor WeakReference.

  • Lang

    Een lange zwakke verwijzing wordt bewaard nadat de methode van Finalize het object is aangeroepen. Hierdoor kan het object opnieuw worden gemaakt, maar de status van het object blijft onvoorspelbaar. Als u een lange verwijzing wilt gebruiken, geeft u true deze op in de WeakReference constructor.

    Als het objecttype geen methode heeft Finalize , is de korte zwakke referentiefunctionaliteit van toepassing en is de zwakke verwijzing alleen geldig totdat het doel wordt verzameld, wat kan gebeuren wanneer de finalizer wordt uitgevoerd.

Als u een sterke verwijzing tot stand wilt brengen en het object opnieuw wilt gebruiken, castt u de Target eigenschap van een WeakReference object naar het type object. Als de Target eigenschap wordt geretourneerd null, is het object verzameld; anders kunt u het object blijven gebruiken omdat de toepassing een sterke verwijzing naar het object heeft hersteld.

Richtlijnen voor het gebruik van zwakke verwijzingen

Gebruik lange zwakke verwijzingen alleen als dat nodig is, omdat de status van het object onvoorspelbaar is na het voltooien.

Vermijd het gebruik van zwakke verwijzingen naar kleine objecten omdat de aanwijzer zelf net zo groot of groter kan zijn.

Vermijd het gebruik van zwakke verwijzingen als een automatische oplossing voor problemen met geheugenbeheer. Ontwikkel in plaats daarvan een effectief cachebeleid voor het verwerken van de objecten van uw toepassing.

Zie ook