Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

WeakReference (Clase)

 

Representa una referencia débil, que hace referencia a un objeto mientras sigue permitiendo que la recolección de elementos no utilizados lo reclame.

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

System.Object
  System.WeakReference

[SerializableAttribute]
[ComVisibleAttribute(true)]
[SecurityPermissionAttribute(SecurityAction.InheritanceDemand, 
	Flags = SecurityPermissionFlag.UnmanagedCode)]
public class WeakReference : ISerializable

NombreDescripción
System_CAPS_pubmethodWeakReference(Object)

Inicializa una nueva instancia de la clase WeakReference que hace referencia al objeto especificado.

System_CAPS_pubmethodWeakReference(Object, Boolean)

Inicializa una nueva instancia de la clase WeakReference que hace referencia al objeto especificado y utiliza el seguimiento especificado del restablecimiento.

System_CAPS_protmethodWeakReference(SerializationInfo, StreamingContext)

Inicializa una nueva instancia de la clase WeakReference utilizando datos sin serializar de la serialización y objetos de secuencia especificados.

NombreDescripción
System_CAPS_pubpropertyIsAlive

Obtiene un valor que indica si el objeto al que hace referencia el objeto WeakReference actual ha sido detectado durante la recolección de elementos no utilizados.

System_CAPS_pubpropertyTarget

Obtiene o establece el objeto (destino) al que hace referencia el objeto WeakReference actual.

System_CAPS_pubpropertyTrackResurrection

Obtiene un valor que indica si se debe realizar un seguimiento del objeto al que hace referencia el objeto WeakReference actual después de su finalización.

NombreDescripción
System_CAPS_pubmethodEquals(Object)

Determina si el objeto especificado es igual al objeto actual.(Heredado de Object.)

System_CAPS_protmethodFinalize()

Descarta la referencia al destino representado por el objeto WeakReference actual.(Reemplaza a Object.Finalize()).

System_CAPS_pubmethodGetHashCode()

Sirve como una función hash para un tipo en particular. (Heredado de Object.)

System_CAPS_pubmethodGetObjectData(SerializationInfo, StreamingContext)

Rellena un objeto SerializationInfo con todos los datos necesarios para serializar el objeto WeakReference actual.

System_CAPS_pubmethodGetType()

Obtiene el Type de la instancia actual. (Heredado de Object.)

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficial del Object actual. (Heredado de Object.)

System_CAPS_pubmethodToString()

Retorna una cadena que representa al objeto actual. (Heredado de Object.)

Una referencia débil permite al recolector de elementos no utilizados recoger un objeto mientras se sigue permitiendo una aplicación para tener acceso al objeto.Si necesita el objeto, puede obtener una referencia fuerte a él y evitar que se recopilan.Para obtener más información acerca de cómo usar corto y las referencias débiles largas, consulte Referências fracas.

En el ejemplo siguiente se muestra cómo puede utilizar referencias débiles para mantener una caché de objetos como un recurso para una aplicación.La memoria caché se construye utilizando una IDictionary<TKey, TValue> de WeakReference objetos ordenados por un valor de índice.El Target propiedad para la WeakReference objetos es un objeto en una matriz de bytes que representa los datos.

El ejemplo aleatoriamente tiene acceso a objetos en la memoria caché.Si se reclama un objeto para la recolección, se vuelve a generar un nuevo objeto de datos; de lo contrario, el objeto está disponible para tener acceso a causa de la referencia débil.

using System;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        // Create the cache.
        int cacheSize = 50;
        Random r = new Random();
        Cache c = new Cache(cacheSize);

        string DataName = "";
        GC.Collect(0);

        // Randomly access objects in the cache.
        for (int i = 0; i < c.Count; i++) {
            int index = r.Next(c.Count);

            // Access the object by getting a property value.
            DataName = c[index].Name;
        }
        // Show results.
        double regenPercent = c.RegenerationCount/(double)c.Count;
        Console.WriteLine("Cache size: {0}, Regenerated: {1:P2}%", c.Count, regenPercent);
    }
}

public class Cache
{
    // Dictionary to contain the cache.
    static Dictionary<int, WeakReference> _cache;

    // Track the number of times an object is regenerated.
    int regenCount = 0;   

    public Cache(int count)
    {
        _cache = new Dictionary<int, WeakReference>();

        // Add objects with a short weak reference to the cache.
       for (int i = 0; i < count; i++) {
            _cache.Add(i, new WeakReference(new Data(i), false));
        }
    }

    // Number of items in the cache.
    public int Count
    {
        get {  return _cache.Count; }
    }

    // Number of times an object needs to be regenerated.
    public int RegenerationCount
    {
        get { return regenCount; }
    }

    // Retrieve a data object from the cache.
    public Data this[int index]
    {
        get {
            Data d = _cache[index].Target as Data;
            if (d == null) {
                // If the object was reclaimed, generate a new one.
                Console.WriteLine("Regenerate object at {0}: Yes", index);
                d = new Data(index);
                _cache[index].Target = d;
                regenCount++;
            }
            else {
                // Object was obtained with the weak reference.
                Console.WriteLine("Regenerate object at {0}: No", index);
            }

            return d;
       }
    }
}

// This class creates byte arrays to simulate data.
public class Data
{
    private byte[] _data;
    private string _name;

    public Data(int size)
    {
        _data = new byte[size * 1024];
        _name = size.ToString();
    }

    // Simple property.
    public string Name
    {
        get { return _name; }
    }
}
// Example of the last lines of the output:
//
// ...
// Regenerate object at 36: Yes
// Regenerate object at 8: Yes
// Regenerate object at 21: Yes
// Regenerate object at 4: Yes
// Regenerate object at 38: No
// Regenerate object at 7: Yes
// Regenerate object at 2: Yes
// Regenerate object at 43: Yes
// Regenerate object at 38: No
// Cache size: 50, Regenerated: 94%

SecurityPermission

Para poder llamar a código no administrado.Valor de petición: InheritanceDemand; Valor de permiso:UnmanagedCode

Universal Windows Platform
Disponible desde 4.5
.NET Framework
Disponible desde 1.1
Portable Class Library
Compatible con: portable .NET platforms
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1

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.

Volver al principio
Mostrar: