(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen.
Übersetzung
Original

WeakReference-Klasse

Stellt einen schwachen Verweis dar. Dieser verweist auf ein Objekt, ohne jedoch dessen Freigabe durch die Garbage Collection zu verhindern.

System.Object
  System.WeakReference

Namespace:  System
Assembly:  mscorlib (in mscorlib.dll)

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

Der WeakReference-Typ macht die folgenden Member verfügbar.

  NameBeschreibung
Öffentliche MethodeUnterstützt von XNA Frameworkhbh8w2zd.PortableClassLibrary(de-de,VS.100).gifWeakReference(Object)Initialisiert eine neue Instanz der WeakReference-Klasse, die auf das angegebene Objekt verweist.
Öffentliche MethodeUnterstützt von XNA Frameworkhbh8w2zd.PortableClassLibrary(de-de,VS.100).gifWeakReference(Object, Boolean)Initialisiert eine neue Instanz der WeakReference-Klasse, die auf das angegebene Objekt verweist und auf die angegebene Art verfolgt, wie es wieder zugänglich gemacht wird.
Geschützte MethodeWeakReference(SerializationInfo, StreamingContext)Initialisiert eine neue Instanz der WeakReference-Klasse mit deserialisierten Daten aus den angegebenen Serialisierungs- und Stream-Objekten.
Zum Seitenanfang

  NameBeschreibung
Öffentliche EigenschaftUnterstützt von XNA Frameworkhbh8w2zd.PortableClassLibrary(de-de,VS.100).gifIsAliveRuft einen Wert ab, der angibt, ob das Objekt, auf das das aktuelle WeakReference-Objekt verweist, an den Garbage Collector übergeben wurde.
Öffentliche EigenschaftUnterstützt von XNA Frameworkhbh8w2zd.PortableClassLibrary(de-de,VS.100).gifTargetRuft das Objekt (das Ziel) ab, auf das das aktuelle WeakReference-Objekt verweist, oder legt dieses fest.
Öffentliche EigenschaftUnterstützt von XNA Frameworkhbh8w2zd.PortableClassLibrary(de-de,VS.100).gifTrackResurrectionRuft eine Angabe darüber ab, ob das Objekt, auf das das aktuelle WeakReference-Objekt verweist, nach der Finalisierung verfolgt wird.
Zum Seitenanfang

  NameBeschreibung
Öffentliche MethodeUnterstützt von XNA Frameworkhbh8w2zd.PortableClassLibrary(de-de,VS.100).gifEquals(Object) Bestimmt, ob das übergegebene Object und das aktuelle Object gleich sind. (Von Object geerbt.)
Geschützte MethodeUnterstützt von XNA Frameworkhbh8w2zd.PortableClassLibrary(de-de,VS.100).gifFinalizeVerwirft den Verweis auf das Ziel, das durch das aktuelle WeakReference-Objekt dargestellt wird. (Überschreibt Object.Finalize().)
Öffentliche MethodeUnterstützt von XNA Frameworkhbh8w2zd.PortableClassLibrary(de-de,VS.100).gifGetHashCodeFungiert als Hashfunktion für einen bestimmten Typ. (Von Object geerbt.)
Öffentliche MethodeGetObjectDataFüllt ein SerializationInfo-Objekt mit allen für das Serialisieren des aktuellen WeakReference-Objekts erforderlichen Daten.
Öffentliche MethodeUnterstützt von XNA Frameworkhbh8w2zd.PortableClassLibrary(de-de,VS.100).gifGetTypeRuft den Type der aktuellen Instanz ab. (Von Object geerbt.)
Geschützte MethodeUnterstützt von XNA Frameworkhbh8w2zd.PortableClassLibrary(de-de,VS.100).gifMemberwiseCloneErstellt eine flache Kopie des aktuellen Object. (Von Object geerbt.)
Öffentliche MethodeUnterstützt von XNA Frameworkhbh8w2zd.PortableClassLibrary(de-de,VS.100).gifToStringGibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Von Object geerbt.)
Zum Seitenanfang

Bei einem schwachen Verweis kann die Garbage Collection das Objekt freigeben, während in der Anwendung noch Zugriffe auf das Objekt möglich sind. Wenn Sie das Objekt benötigen, können Sie einen starken Verweis abrufen und so die Freigabe des Objekts verhindern. Weitere Informationen zur Verwendung schwacher und starker Verweise finden Sie unter Schwache Verweise.

Im folgenden Beispiel wird veranschaulicht, wie Sie mit schwachen Verweisen einen Cache von Objekten als Ressource für eine Anwendung verwalten können. Der Cache wird mit einem IDictionary<TKey, TValue> von WeakReference-Objekten erstellt, die durch einen Indexwert verschlüsselt werden. Die Target-Eigenschaft für die WeakReference-Objekte ist ein Objekt in einem Bytearray, das Daten darstellt.

Im Beispiel erfolgt ein zufälliger Zugriff auf Objekte im Cache. Wenn ein Objekt für die Garbage Collection freigegeben wird, wird ein neues Datenobjekt erstellt, andernfalls ist das Objekt aufgrund des schwachen Verweises für einen Zugriff verfügbar.


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 = "";

        // 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 * 100 / c.Count;
        Console.WriteLine("Cache size: {0}, Regenerated: {1}%", c.Count.ToString(), regenPercent.ToString());

    }
}


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 data 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));
        }

    }

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

    // Returns the number of times an 
    // object had to be regenerated.
    public int RegenerationCount
    {
        get
        {
            return regenCount;
        }
    }

    // Accesses a data object from the cache.
    // If the object was reclaimed for garbage collection,
    // create a new data object at that index location.
    public Data this[int index]
    {
        get
        {
            // Obtain an instance of a data
            // object from the cache of
            // of weak reference objects.
            Data d = _cache[index].Target as Data;
            if (d == null)
            {
                // Object was reclaimed, so generate a new one.
                Console.WriteLine("Regenerate object at {0}: Yes", index.ToString());
                d = new Data(index);
                regenCount++;
            }
            else
            {
                // Object was obtained with the weak reference.
                Console.WriteLine("Regenerate object at {0}: No", index.ToString());
            }

            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%
//


.NET Framework

Unterstützt in: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Unterstützt in:

Windows 7, Windows Vista SP1 oder höher, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core wird nicht unterstützt), Windows Server 2008 R2 (Server Core wird mit SP1 oder höher unterstützt), Windows Server 2003 SP2

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft