(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Ü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
Geschützte MethodeWeakReference()
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsWeakReference(Object)Initialisiert eine neue Instanz der WeakReference-Klasse, die auf das angegebene Objekt verweist.
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsWeakReference(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 FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsIsAliveRuft 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 FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsTargetRuft das Objekt (das Ziel) ab, auf das das aktuelle WeakReference-Objekt verweist, oder legt dieses fest.
Öffentliche EigenschaftUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsTrackResurrectionRuft 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 FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsEquals(Object)Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist. (Von Object geerbt.)
Geschützte MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsFinalizeVerwirft den Verweis auf das Ziel, das durch das aktuelle WeakReference-Objekt dargestellt wird. (Überschreibt Object.Finalize().)
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsGetHashCodeFungiert als die Standardhashfunktion. (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 FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsGetTypeRuft den Type der aktuellen Instanz ab. (Von Object geerbt.)
Geschützte MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsMemberwiseCloneErstellt eine flache Kopie des aktuellen Object. (Von Object geerbt.)
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsToStringGibt 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 = "";
        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%


.NET Framework

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

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

.NET für Windows Store-Apps

Unterstützt in: Windows 8

.NET für Windows Phone-Apps

Unterstützt in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.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