Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le garbage collector ne peut pas collecter un objet en cours d’utilisation par une application alors que le code de l’application peut atteindre cet objet. L’application est dite avoir une référence forte à l’objet.
Une référence faible permet au garbage collector de collecter l’objet tout en permettant à l’application d’accéder à l’objet. Une référence faible est valide uniquement pendant la durée indéterminée jusqu’à ce que l’objet soit collecté lorsqu’aucune référence forte n’existe. Lorsque vous utilisez une référence faible, l’application peut toujours obtenir une référence forte à l’objet, ce qui l’empêche d’être collectée. Toutefois, il existe toujours le risque que le garbage collector accède d’abord à l’objet avant qu’une référence forte soit rétablie.
Les références faibles sont utiles pour les objets qui utilisent beaucoup de mémoire, mais peuvent être recréés facilement s’ils sont récupérés par garbage collection.
Supposons qu’une arborescence dans une application Windows Forms affiche un choix hiérarchique complexe d’options à l’utilisateur. Si les données sous-jacentes sont volumineuses, la conservation de l’arborescence en mémoire est inefficace lorsque l’utilisateur est impliqué dans un autre élément de l’application.
Lorsque l’utilisateur bascule vers une autre partie de l’application, vous pouvez utiliser la WeakReference classe pour créer une référence faible à l’arborescence et détruire toutes les références fortes. Lorsque l’utilisateur revient à l’arborescence, l’application tente d’obtenir une référence forte à l’arborescence et, si elle réussit, évite de reconstruire l’arborescence.
Pour établir une référence faible avec un objet, vous créez une WeakReference instance de l’objet à suivre. Pour obtenir un exemple de code, consultez WeakReference la bibliothèque de classes.
Références faibles courtes et longues
Vous pouvez créer une référence faible courte ou une référence faible longue :
Court
La cible d’une référence faible courte devient
nulllorsque l’objet est récupéré par le garbage collection. La référence faible est elle-même un objet managé et est soumise à garbage collection comme n’importe quel autre objet managé. Une référence faible courte est le constructeur sans paramètre pour WeakReference.Long
Une référence faible longue est conservée après l’appel de la méthode de l’objet Finalize . Cela permet à l’objet d’être recréé, mais l’état de l’objet reste imprévisible. Pour utiliser une référence longue, spécifiez-le
truedans le WeakReference constructeur.Si le type de l’objet n’a pas de Finalize méthode, la fonctionnalité de référence faible courte s’applique et la référence faible est valide uniquement tant que la cible n’est pas collectée, ce qui peut se produire à tout moment après l’exécution du finaliseur.
Pour établir une référence forte et utiliser à nouveau l’objet, convertissez la Target propriété d’un WeakReference vers le type de l’objet. Si la Target propriété retourne null, l’objet a été collecté ; sinon, vous pouvez continuer à utiliser l’objet, car l’application a récupéré une référence forte à celle-ci.
Instructions relatives à l’utilisation de références faibles
Utilisez des références faibles longues uniquement si nécessaire, car l’état de l’objet est imprévisible après la finalisation.
Évitez d’utiliser des références faibles à de petits objets, car le pointeur lui-même peut être aussi grand ou plus grand.
Évitez d’utiliser des références faibles comme solution automatique aux problèmes de gestion de la mémoire. Au lieu de cela, développez une stratégie de mise en cache efficace pour gérer les objets de votre application.