(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

GC-Klasse

Steuert den Garbage Collector des Systems. Das ist ein Dienst, der nicht verwendeten Speicher automatisch freigibt.

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

public static class GC

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

  NameBeschreibung
Öffentliche EigenschaftStatischer MemberUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsMaxGenerationRuft die maximale Anzahl von Generationen ab, die das System gegenwärtig unterstützt.
Zum Seitenanfang

  NameBeschreibung
Öffentliche MethodeStatischer MemberUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsAddMemoryPressureInformiert die Laufzeit über eine große Belegung von nicht verwaltetem Arbeitsspeicher, der beim Planen der Garbage Collection in Erwägung gezogen werden muss.
Öffentliche MethodeStatischer MemberCancelFullGCNotificationBricht die Registrierung einer Garbage Collection-Benachrichtigung ab.
Öffentliche MethodeStatischer MemberUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsCollect()Erzwingt eine sofortige Garbage Collection für alle Generationen.
Öffentliche MethodeStatischer MemberUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsCollect(Int32)Erzwingt eine sofortige Garbage Collection von Generation 0 (null) bis zu einer angegebenen Generation.
Öffentliche MethodeStatischer MemberUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsCollect(Int32, GCCollectionMode)Erzwingt eine Garbage Collection von Generation 0 (null) bis zu einer angegebenen Generation zu einem durch einen GCCollectionMode-Wert angegebenen Zeitpunkt.
Öffentliche MethodeStatischer MemberUnterstützt in .NET für Windows Store-AppsCollect(Int32, GCCollectionMode, Boolean)Erzwingt eine Garbage Collection von Generation 0 (null) bis zu einer angegebenen Generation, angegeben durch jeweils einen GCCollectionMode-Wert und mit einem Wert, der angibt, ob die Auflistung blockieren soll.
Öffentliche MethodeStatischer MemberUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsCollectionCountGib die Anzahl zurück, wie oft die Garbage Collection für die angegebene Objektgeneration stattgefunden hat.
Öffentliche MethodeStatischer MemberGetGeneration(Object)Gibt die aktuelle Generationszahl des angegebenen Objekts zurück.
Öffentliche MethodeStatischer MemberGetGeneration(WeakReference)Gibt die aktuelle Generationszahl für das Ziel eines angegebenen schwachen Verweises zurück.
Öffentliche MethodeStatischer MemberUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsGetTotalMemoryRuft einen Schätzwert für die reservierte Anzahl von Bytes ab. Ein Parameter gibt an, ob diese Methode vor der Rückgabe eine kurze Zeit warten kann, damit das System die Garbage Collection durchführen und Objekte finalisieren kann.
Öffentliche MethodeStatischer MemberUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsKeepAliveVerweist auf das angegebene Objekt und nimmt es von Beginn der aktuellen Routine bis zum Zeitpunkt des Aufrufs dieser Methode von der Garbage Collection aus.
Öffentliche MethodeStatischer MemberRegisterForFullGCNotificationGibt an, dass eine Garbage Collection-Benachrichtigung ausgelöst werden soll, wenn eine vollständige Garbage Collection durch die Bedingungen begünstigt wird und wenn die Garbage Collection abgeschlossen wurde.
Öffentliche MethodeStatischer MemberUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsRemoveMemoryPressureInformiert die Laufzeit, dass nicht verwalteter Arbeitsspeicher freigegeben wurde und beim Planen der Garbage Collection nicht mehr berücksichtigt werden muss.
Öffentliche MethodeStatischer MemberUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsReRegisterForFinalizeFordert beim System den Aufruf des Finalizers für das angegebene Objekt an, für das zuvor SuppressFinalize aufgerufen wurde.
Öffentliche MethodeStatischer MemberUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsSuppressFinalizeFordert die Common Language Runtime auf, den Finalizer für das angegebenen Objekt nicht aufzurufen.
Öffentliche MethodeStatischer MemberWaitForFullGCApproach()Gibt den Status einer registrierten Benachrichtigung zurück, um zu bestimmen, ob eine vollständige blockierende Garbage Collection durch die Common Language Runtime bevorsteht.
Öffentliche MethodeStatischer MemberWaitForFullGCApproach(Int32)Gibt innerhalb einer angegebenen Timeoutspanne den Status einer registrierten Benachrichtigung zurück, um zu bestimmen, ob eine vollständige blockierende Garbage Collection durch die Common Language Runtime bevorsteht.
Öffentliche MethodeStatischer MemberWaitForFullGCComplete()Gibt den Status einer registrierten Benachrichtigung zurück, um zu bestimmen, ob eine vollständige blockierende Garbage Collection durch die Common Language Runtime abgeschlossen wurde.
Öffentliche MethodeStatischer MemberWaitForFullGCComplete(Int32)Gibt innerhalb einer angegebenen Timeoutspanne den Status einer registrierten Benachrichtigung zurück, um zu bestimmen, ob eine vollständige blockierende Garbage Collection durch die Common Language Runtime abgeschlossen wurde.
Öffentliche MethodeStatischer MemberUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsWaitForPendingFinalizersHält den aktuellen Thread so lange an, bis der Thread, der die Finalizerwarteschlange verarbeitet, diese Warteschlange geleert hat.
Zum Seitenanfang

Die Methoden dieser Klasse beeinflussen den Zeitpunkt, zu dem die Garbage Collection für ein Objekt durchgeführt wird und zu dem die von einem Objekt reservierten Ressourcen freigegeben werden. Eigenschaften dieser Klasse geben Aufschluss über den im System insgesamt verfügbaren Speicher und die Alterskategorie, d. h. die Generation, des für ein Objekt belegten Speichers.

Der Garbage Collector verfolgt Objekte, die im verwalteten Speicher abgelegt sind, und gibt sie frei. Der Garbage Collector führt regelmäßig eine Garbage Collection durch, um Speicher freizugeben, der für Objekte belegt ist, auf die keine gültigen Verweise mehr vorhanden sind. Die Garbage Collection findet automatisch statt, wenn der verfügbare Speicher für eine Speicheranforderung nicht ausreicht. Eine Anwendung kann mit der Collect-Methode auch eine Garbage Collection erzwingen.

Eine Garbage Collection umfasst folgende Schritte:

  1. Der Garbage Collector sucht nach verwalteten Objekten, auf die in verwaltetem Code verwiesen wird.

  2. Der Garbage Collector versucht, Objekte zu finalisieren, auf die keine Verweise vorhanden sind.

  3. Der Garbage Collector gibt Objekte frei, auf die keine Verweise vorhanden sind, und er stellt deren Speicher wieder zur Verfügung.

Bei einer Garbage Collection gibt der Garbage Collector ein Objekt nicht frei, wenn in verwaltetem Code mindestens ein Verweis auf das Objekt vorhanden ist. Der Garbage Collector erkennt allerdings keine Verweise auf ein Objekt aus nicht verwaltetem Code. Wenn dies nicht ausdrücklich verhindert wird, gibt er deshalb möglicherweise Objekte frei, auf die ausschließlich in nicht verwaltetem Code verwiesen wird. Die KeepAlive-Methode bietet eine Möglichkeit, den Garbage Collector an der Freigabe von Objekten zu hindern, die in nicht verwaltetem Code noch verwendet werden.

Die Implementierungen des Garbage Collectors halten außer den verwalteten Speicherbelegungen keine weiteren Informationen über die von einem Objekt beanspruchten Ressourcen bereit, z. B. über Dateihandles oder Datenbankverbindungen. Wenn ein Typ nicht verwaltete Ressourcen verwendet, die vor der Freigabe einer Instanz des Typs freigegeben werden müssen, kann er einen Finalizer implementieren.

Meist werden Finalizer durch Überschreiben der Object.Finalize-Methode implementiert. In C# oder C++ geschriebene Typen verwenden dagegen Destruktoren, die von Compilern in eine Überschreibung von Object.Finalize umgewandelt werden. Wenn ein Objekt einen Finalizer aufweist, wird dieser vom Garbage Collector in den meisten Fällen vor der Freigabe des Objekts aufgerufen. Der Garbage Collector ist jedoch nicht in allen Situationen zum Aufrufen der Finalizer erforderlich; die SuppressFinalize-Methode zum Beispiel verhindert explizit, dass ein Finalizer aufgerufen wird. Außerdem braucht der Garbage Collector keinen bestimmten Thread zum Finalisieren von Objekten zu verwenden, und es wird keine bestimmte Reihenfolge beim Aufrufen der Finalizer für Objekte garantiert, die aufeinander verweisen und im Übrigen für eine Garbage Collection zur Verfügung stehen.

In Szenarien, in denen Ressourcen zu bestimmten Zeitpunkten freigegeben werden müssen, können Klassen die IDisposable-Schnittstelle implementieren. Deren IDisposable.Dispose-Methode übernimmt die Ressourcenverwaltung und Bereinigungsaufgaben. Bei Klassen, die Dispose implementieren, muss als Teil des Klassenvertrags angegeben werden, ob und wann Klassenconsumer die Methode zur Bereinigung des Objekts aufrufen müssen. In der Standardeinstellung ruft der Garbage Collector die Dispose-Methode nicht auf. Implementierungen der Dispose-Methode können jedoch Methoden der GC-Klasse aufrufen, um das Finalisierungsverhalten des Garbage Collectors anzupassen.

Es wird empfohlen, dass Garbage Collectors das Altern von Objekten mithilfe von Generationen unterstützen, obwohl dies nicht zwingend erforderlich ist. Eine Generation ist eine Maßeinheit für das relative Alter von Objekten im Arbeitsspeicher. Die Generationszahl, d. h. das Alter, von Objekten gibt an, welcher Generation ein Objekt angehört. Später erstellte Objekte gehören einer neueren Generation an und weisen niedrigere Generationszahlen auf als Objekte, die im Lebenszyklus der Anwendung früher erstellt wurden. Objekte in der neuesten Generierung sind in Generation 0.

Hinweise zur Implementierung

Die vorliegende Implementierung des Garbage Collectors unterstützt drei Generationen von Objekten.

Mit MaxGeneration wird die maximale vom System unterstützte Generationszahl bestimmt. Das Altern von Objekten ermöglicht es Anwendungen, die Garbage Collection auf eine bestimmte Gruppe von Generationen auszurichten, anstatt den Garbage Collector alle Generationen auswerten zu lassen.

Im folgenden Beispiel werden verschiedene Garbage Collection-Methoden verwendet, um Generations- und Speicherinformationen über einen Block nicht verwendeter Objekte abzurufen und in der Konsole auszugeben. Anschließend werden die nicht verwendeten Objekte gesammelt, und die resultierende Gesamtspeichergröße wird angezeigt.


using System;

namespace GCCollectIntExample
{
    class MyGCCollectClass
    {
        private const long maxGarbage = 1000;

        static void Main()
        {
            MyGCCollectClass myGCCol = new MyGCCollectClass();

            // Determine the maximum number of generations the system
	    // garbage collector currently supports.
            Console.WriteLine("The highest generation is {0}", GC.MaxGeneration);

            myGCCol.MakeSomeGarbage();

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));

            // Determine the best available approximation of the number 
	    // of bytes currently allocated in managed memory.
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));

            // Perform a collection of generation 0 only.
            GC.Collect(0);

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));

            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));

            // Perform a collection of all generations up to and including 2.
            GC.Collect(2);

            // Determine which generation myGCCol object is stored in.
            Console.WriteLine("Generation: {0}", GC.GetGeneration(myGCCol));
            Console.WriteLine("Total Memory: {0}", GC.GetTotalMemory(false));
            Console.Read();
        }

        void MakeSomeGarbage()
        {
            Version vt;

            for(int i = 0; i < maxGarbage; i++)
            {
                // Create objects and release them to fill up memory
		// with unused objects.
                vt = new Version();
            }
        }
    }
}


.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