Esta documentación está archivada y no tiene mantenimiento.

WeakReference (Clase)

Representa una referencia débil, que hace referencia a un objeto pero que sigue permitiendo que éste se recoja durante la recolección de elementos no utilizados.

Espacio de nombres: System
Ensamblado: mscorlib (en mscorlib.dll)

[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public class WeakReference : ISerializable
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public class WeakReference implements ISerializable
SerializableAttribute 
ComVisibleAttribute(true) 
public class WeakReference implements ISerializable

El mecanismo de recolección de elementos no utilizados de Common Language Runtime reclama los objetos inaccesibles de la memoria. Un objeto pasa a estar inaccesible cuando todas las referencias directas e indirectas a dicho objeto dejan de ser válidas (por ejemplo, al establecer dichas referencias en referencia de objeto null (Nothing en Visual Basic)). Las referencias a objetos accesibles se denominan referencias fuertes.

Las referencias débiles también hacen referencia a objetos accesibles, a los que se denomina destinos. El usuario, para crear una referencia fuerte al destino, tiene que asignar el valor de la propiedad Target a una variable. No obstante, si no hay referencias fuertes al destino, éste será susceptible de ser detectado durante la recolección de elementos no utilizados aunque tenga una referencia débil al objeto.

Puede producirse un retardo entre el momento en que un objeto pasa a ser susceptible de ser detectado durante la recolección de elementos no utilizados y el momento en que se detecta. Si el usuario intenta recuperar el destino tras su recolección, sólo recuperará una referencia nula. Si aún no se ha recolectado, recuperará una referencia válida.

El mecanismo de recolección de elementos no utilizados llama al método Finalize de un objeto (es decir, lleva a cabo la finalización), si dicho método existe y si tiene instrucciones de hacerlo. Tras la finalización, se produce una excepción InvalidOperationException si el usuario intenta obtener acceso al objeto con las propiedades IsAlive o Target del objeto WeakReference actual.

Terminología

Es muy útil tener algún conocimiento de la jerga que se utiliza para describir los objetos y la recolección de elementos no utilizados. Se dice que un objeto está activo cuando es accesible y se puede utilizar. Se dice que un objeto está inactivo cuando no se utiliza y es susceptible de ser detectado durante la recolección de elementos no utilizados. Si se obtiene una referencia fuerte a un objeto inactivo, el objeto pasa de nuevo a estar activo y se dice que se ha restablecido el objeto.

Un objeto WeakReference puede especificar si ha de mantenerse la referencia al destino después de la finalización; es decir, si la referencia débil debe realizar un seguimiento del restablecimiento del destino. Una referencia débil que no realiza un seguimiento del restablecimiento se denomina referencia débil corta y una referencia débil que realiza un seguimiento del restablecimiento se denomina referencia débil larga.

Consideraciones sobre el rendimiento

Es muy habitual que se mencione la clase WeakReference en los ejemplos de código en los que una caché de objetos WeakReference mantiene referencias a un conjunto de objetos que utiliza una aplicación. Por ejemplo, si el objeto cae en desuso porque queda fuera del ámbito, el mecanismo de recolección de elementos no utilizados aún puede reclamar la memoria asignada.

Este ejemplo se utiliza para mostrar un ingenioso esquema de administración de memoria, aunque puede inducir a error porque la clase WeakReference no se puede tratar como una solución automática a los problemas de administración de memoria. Sigue siendo necesario establecer las reglas de la aplicación, es decir, una directiva de almacenamiento en caché que contemple las entradas que hay que conservar o eliminar de una caché.

System.Object
  System.WeakReference

Los miembros estáticos públicos (Shared en Visual Basic) de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter Edition

.NET Framework no admite todas las versiones de cada plataforma. Para obtener una lista de las versiones admitidas, vea Requisitos del sistema.

.NET Framework

Compatible con: 2.0, 1.1, 1.0

.NET Compact Framework

Compatible con: 2.0, 1.0
Mostrar: