Références faiblesWeak References

Le Garbage collector ne peut pas collecter un objet actuellement utilisé par une application, tandis que le code de l’application peut accéder à cet objet.The garbage collector cannot collect an object in use by an application while the application's code can reach that object. On dit de l’application qu’elle a une référence forte à l’objet.The application is said to have a strong reference to the object.

Une référence faible permet au Garbage collector de collecter l’objet tout en permettant à l’application d’y accéder.A weak reference permits the garbage collector to collect the object while still allowing the application to access the object. Une référence faible est valide uniquement pour une période indéterminée jusqu’à ce que l’objet soit collecté quand il n’existe aucune référence forte.A weak reference is valid only during the indeterminate amount of time until the object is collected when no strong references exist. Quand 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é.When you use a weak reference, the application can still obtain a strong reference to the object, which prevents it from being collected. Toutefois, il existe toujours un risque que le Garbage collector accède à l’objet avant qu’une référence forte soit rétablie.However, there is always the risk that the garbage collector will get to the object first before a strong reference is reestablished.

Les références faibles sont utiles pour les objets qui utilisent beaucoup de mémoire, mais peuvent être recréées facilement si elles sont récupérées par le garbage collection.Weak references are useful for objects that use a lot of memory, but can be recreated easily if they are reclaimed by garbage collection.

Supposons que l’arborescence d’une application Windows Forms présente à l’utilisateur un choix hiérarchique d’options complexe.Suppose a tree view in a Windows Forms application displays a complex hierarchical choice of options to the user. Si les données sous-jacentes sont volumineuses, la conservation de l’arborescence en mémoire est inefficace quand l’utilisateur est impliqué dans un autre élément de l’application.If the underlying data is large, keeping the tree in memory is inefficient when the user is involved with something else in the application.

Quand l’utilisateur passe à une autre partie de l’application, vous pouvez utiliser la classe WeakReference pour créer une référence faible à l’arborescence et détruire toutes les références fortes.When the user switches away to another part of the application, you can use the WeakReference class to create a weak reference to the tree and destroy all strong references. Quand l’utilisateur revient à l’arborescence, l’application tente d’obtenir une référence forte à l’arborescence et, en cas de réussite, évite de reconstruire l’arborescence.When the user switches back to the tree, the application attempts to obtain a strong reference to the tree and, if successful, avoids reconstructing the tree.

Pour établir une référence faible à un objet, vous créez un WeakReference à l’aide de l’instance de l’objet à suivre.To establish a weak reference with an object, you create a WeakReference using the instance of the object to be tracked. Vous affectez ensuite cet objet à la propriété Target et vous définissez la référence d’origine à l’objet sur null.You then set the Target property to that object and set the original reference to the object to null. Pour obtenir un exemple de code, consultez WeakReference dans la bibliothèque de classes.For a code example, see WeakReference in the class library.

Références faibles courtes et longuesShort and Long Weak References

Vous pouvez créer une référence faible courte ou une référence faible longue :You can create a short weak reference or a long weak reference:

  • CourteShort

    La cible d’une référence faible courte devient null quand l’objet est récupéré par le garbage collection.The target of a short weak reference becomes null when the object is reclaimed by garbage collection. La référence faible est elle-même un objet managé et fait l’objet d’un garbage collection comme tout autre objet managé.The weak reference is itself a managed object, and is subject to garbage collection just like any other managed object. Une référence faible courte est le constructeur par défaut WeakReference.A short weak reference is the default constructor for WeakReference.

  • LongueLong

    Une référence faible longue est conservée après l’appel de la méthode Finalize.A long weak reference is retained after the object's Finalize method has been called. Cela permet à l’objet d’être recréé, mais l’état de l’objet reste imprévisible.This allows the object to be recreated, but the state of the object remains unpredictable. Pour utiliser une référence longue, spécifiez true dans le constructeur WeakReference.To use a long reference, specify true in the WeakReference constructor.

    Si le type de l’objet ne dispose pas d’une méthode Finalize, la fonctionnalité de la référence faible courte s’applique et la référence faible est valide uniquement jusqu’à la collecte de la cible, ce qui peut se produire à tout moment après l’exécution du finaliseur.If the object's type does not have a Finalize method, the short weak reference functionality applies and the weak reference is valid only until the target is collected, which can occur anytime after the finalizer is run.

Pour établir une référence forte et réutiliser l’objet, effectuez un cast de la propriété Target d’un WeakReference vers le type de l’objet.To establish a strong reference and use the object again, cast the Target property of a WeakReference to the type of the object. Si la propriété Target retourne la valeur 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 à celui-ci.If the Target property returns null, the object was collected; otherwise, you can continue to use the object because the application has regained a strong reference to it.

Instructions d’utilisation de références faiblesGuidelines for Using Weak References

Utilisez des références faibles longues uniquement quand cela est nécessaire, car l’état de l’objet est imprévisible après la finalisation.Use long weak references only when necessary as the state of the object is unpredictable after finalization.

Évitez d’utiliser des références faibles aux petits objets, car le pointeur lui-même peut être de la même taille ou d’une taille supérieure.Avoid using weak references to small objects because the pointer itself may be as large or larger.

Évitez d’utiliser les références faibles comme solution automatique aux problèmes de gestion de la mémoire.Avoid using weak references as an automatic solution to memory management problems. Développez plutôt une stratégie de mise en cache efficace pour gérer les objets de votre application.Instead, develop an effective caching policy for handling your application's objects.

Voir aussiSee also