Markieren Sie das Kontrollkästchen Englisch, um die englische Version dieses Artikels anzuzeigen. Sie können den englischen Text auch in einem Popup-Fenster einblenden, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch
Diese Dokumentation wurde archiviert und wird nicht länger gepflegt.

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 FrameworkMaxGenerationRuft die maximale Anzahl von Generationen ab, die das System gegenwärtig unterstützt.
Zum Seitenanfang

  NameBeschreibung
Öffentliche MethodeStatischer MemberAddMemoryPressureInformiert 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 FrameworkCollect()Erzwingt eine sofortige Garbage Collection für alle Generationen.
Öffentliche MethodeStatischer MemberCollect(Int32)Erzwingt eine sofortige Garbage Collection von Generation 0 (null) bis zu einer angegebenen Generation.
Öffentliche MethodeStatischer MemberCollect(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 MemberCollectionCountGib 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 FrameworkGetTotalMemoryRuft 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 Frameworka0fwz4wc.PortableClassLibrary(de-de,VS.100).gifKeepAliveVerweist 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 MemberRemoveMemoryPressureInformiert 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 Frameworka0fwz4wc.PortableClassLibrary(de-de,VS.100).gifReRegisterForFinalizeFordert 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 Frameworka0fwz4wc.PortableClassLibrary(de-de,VS.100).gifSuppressFinalizeFordert das System 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 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 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 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 durch die Common Language Runtime eine vollständige Garbage Collection abgeschlossen wurde.
Öffentliche MethodeStatischer MemberUnterstützt von XNA FrameworkWaitForPendingFinalizersHä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 der letzten Generation gehören der Generation 0 an.

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, 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.
Anzeigen: