Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

GC-Klasse

 

Veröffentlicht: Oktober 2016

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

NameBeschreibung
System_CAPS_pubpropertySystem_CAPS_staticMaxGeneration

Ruft die maximale Anzahl von Generationen ab, die das System gegenwärtig unterstützt.

NameBeschreibung
System_CAPS_pubmethodSystem_CAPS_staticAddMemoryPressure(Int64)

Informiert die Laufzeit über eine große Belegung von nicht verwaltetem Arbeitsspeicher, der beim Planen der Garbage Collection in Erwägung gezogen werden muss.

System_CAPS_pubmethodSystem_CAPS_staticCancelFullGCNotification()

Bricht die Registrierung einer Garbage Collection-Benachrichtigung ab.

System_CAPS_pubmethodSystem_CAPS_staticCollect()

Erzwingt eine sofortige Garbage Collection für alle Generationen.

System_CAPS_pubmethodSystem_CAPS_staticCollect(Int32)

Erzwingt eine sofortige Garbage Collection von Generation 0 (null) bis zu einer angegebenen Generation.

System_CAPS_pubmethodSystem_CAPS_staticCollect(Int32, GCCollectionMode)

Erzwingt eine Garbage Collection von Generation 0 (null) bis zu einer angegebenen Generation zu einem durch einen GCCollectionMode-Wert angegebenen Zeitpunkt.

System_CAPS_pubmethodSystem_CAPS_staticCollect(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.

System_CAPS_pubmethodSystem_CAPS_staticCollect(Int32, GCCollectionMode, Boolean, Boolean)

Erzwingt eine Garbage Collection von Generation 0 (null) bis zu einer angegebenen Generation, angegeben durch jeweils einen GCCollectionMode-Wert und mit Werten, die angeben, ob die Auflistung blockieren und komprimieren soll.

System_CAPS_pubmethodSystem_CAPS_staticCollectionCount(Int32)

Gib die Anzahl zurück, wie oft die Garbage Collection für die angegebene Objektgeneration stattgefunden hat.

System_CAPS_pubmethodSystem_CAPS_staticEndNoGCRegion()

Beendet den Latenzmodus ohne GC-Region.

System_CAPS_pubmethodSystem_CAPS_staticGetGeneration(Object)

Gibt die aktuelle Generationszahl des angegebenen Objekts zurück.

System_CAPS_pubmethodSystem_CAPS_staticGetGeneration(WeakReference)

Gibt die aktuelle Generationszahl für das Ziel eines angegebenen schwachen Verweises zurück.

System_CAPS_pubmethodSystem_CAPS_staticGetTotalMemory(Boolean)

Ruft 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.

System_CAPS_pubmethodSystem_CAPS_staticKeepAlive(Object)

Verweist auf das angegebene Objekt und nimmt es von Beginn der aktuellen Routine bis zum Zeitpunkt des Aufrufs dieser Methode von der Garbage Collection aus.

System_CAPS_pubmethodSystem_CAPS_staticRegisterForFullGCNotification(Int32, Int32)

Gibt 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.

System_CAPS_pubmethodSystem_CAPS_staticRemoveMemoryPressure(Int64)

Informiert die Laufzeit, dass nicht verwalteter Arbeitsspeicher freigegeben wurde und beim Planen der Garbage Collection nicht mehr berücksichtigt werden muss.

System_CAPS_pubmethodSystem_CAPS_staticReRegisterForFinalize(Object)

Fordert beim System den Aufruf des Finalizers für das angegebene Objekt an, für das zuvor SuppressFinalize aufgerufen wurde.

System_CAPS_pubmethodSystem_CAPS_staticSuppressFinalize(Object)

Fordert die Common Language Runtime auf, den Finalizer für das angegebene Objekt nicht aufzurufen.

System_CAPS_pubmethodSystem_CAPS_staticTryStartNoGCRegion(Int64)

Versucht, Garbage Collection während der Ausführung eines kritischen Pfads zu unterbinden, wenn eine bestimmte Arbeitsspeichermenge verfügbar ist.

System_CAPS_pubmethodSystem_CAPS_staticTryStartNoGCRegion(Int64, Boolean)

Versucht, Garbage Collection während der Ausführung eines kritischen Pfads zu unterbinden, wenn eine bestimmte Arbeitsspeichermenge verfügbar ist, und steuert die Ausführung einer vollständigen blockierenden Garbage Collection durch den Garbage Collector, wenn nicht genügend Arbeitsspeicher verfügbar ist.

System_CAPS_pubmethodSystem_CAPS_staticTryStartNoGCRegion(Int64, Int64)

Versucht, Garbage Collection während der Ausführung eines kritischen Pfads zu unterbinden, wenn eine bestimmte Arbeitsspeichermenge für den großen und den kleinen Objektheap verfügbar ist.

System_CAPS_pubmethodSystem_CAPS_staticTryStartNoGCRegion(Int64, Int64, Boolean)

Versucht, Garbage Collection während der Ausführung eines kritischen Pfads zu unterbinden, wenn eine bestimmte Arbeitsspeichermenge für den großen und den kleinen Objektheap verfügbar ist, und steuert die Ausführung einer vollständigen blockierenden Garbage Collection durch den Garbage Collector, wenn nicht genügend Arbeitsspeicher verfügbar ist.

System_CAPS_pubmethodSystem_CAPS_staticWaitForFullGCApproach()

Gibt den Status einer registrierten Benachrichtigung zurück, um zu bestimmen, ob eine vollständige blockierende Garbage Collection durch die Common Language Runtime bevorsteht.

System_CAPS_pubmethodSystem_CAPS_staticWaitForFullGCApproach(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.

System_CAPS_pubmethodSystem_CAPS_staticWaitForFullGCComplete()

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.

System_CAPS_pubmethodSystem_CAPS_staticWaitForFullGCComplete(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.

System_CAPS_pubmethodSystem_CAPS_staticWaitForPendingFinalizers()

Hält den aktuellen Thread so lange an, bis der Thread, der die Finalizerwarteschlange verarbeitet, diese Warteschlange geleert hat.

Der Garbage Collector ist eine Komponente von common Language Runtime, die die Belegung und Freigabe des verwalteten Speichers steuert. Die Methoden in dieser Klasse beeinflussen, wenn der Garbagecollection ausgeführt wird, auf ein Objekt, und wenn von einem Objekt zugeordnete Ressourcen freigegeben werden. Eigenschaften in dieser Klasse stellen Informationen über die Gesamtmenge des verfügbaren Arbeitsspeichers in das System und die Alterskategorie oder Generation, des Arbeitsspeichers für ein Objekt bereit.

Der Garbage Collector verfolgt und im verwalteten Speicher reservierten Objekte freigibt. Der Garbage Collector führt regelmäßig eine speicherbereinigung zum Freigeben des Arbeitsspeichers für Objekte, die keine gültigen Verweise vorhanden sind. Garbagecollection erfolgt automatisch, wenn eine Anforderung für den Arbeitsspeicher nicht genügend freien Arbeitsspeicher erfüllt werden kann. Alternativ kann eine Anwendung mithilfe von Garbage Collection erzwingen die Collect Methode.

Garbagecollection umfasst die folgenden Schritte:

  1. Der Garbage Collector sucht für verwaltete Objekte, die in verwaltetem Code verwiesen werden.

  2. Der Garbage Collector versucht, Objekte zu finalisieren, die nicht verwiesen wird.

  3. Der Garbage Collector gibt Objekte, die nicht verwiesen wird, und gibt ihren Speicher frei.

Dieses Thema enthält die folgenden Abschnitte:

Der Garbage Collector und nicht verwalteten Ressourcen
Objekt Alterungszeitraum und Generationen
Verhindern der Garbagecollection

Während einer Collection wird der Garbage Collector ein Objekt nicht frei, wenn eine oder mehrere Verweise auf das Objekt in verwaltetem Code gefunden. Allerdings wird der Garbage Collector erkennt keine Verweise auf ein Objekt aus nicht verwaltetem Code und möglicherweise Objekte, die ausschließlich in nicht verwaltetem Code verwendet werden, es sei denn, die explizit auf diese Weise daran gehindert freigeben. Die KeepAlive Methode bietet einen Mechanismus, der verhindert, dass der Garbage Collector das Sammeln von Objekten, die in nicht verwaltetem Code noch verwendet werden.

Abgesehen von der verwalteten speicherbelegungen Implementierungen von der Garbage Collector nicht Informationen über ein Objekt, z. B. Dateihandles oder Datenbankverbindungen reservierten Ressourcen zum Verwalten. Wenn ein Typ nicht verwaltete Ressourcen, die freigegeben werden müssen verwendet, bevor Instanzen des Typs freigegeben werden, kann der Typ einen Finalizer implementieren.

In den meisten Fällen Finalizer implementiert werden, durch Überschreiben der Object.Finalize Methode jedoch in c# oder C++ geschriebene Typen Destruktoren, die von Compilern, in eine Überschreibung der umwandeln Object.Finalize. In den meisten Fällen Wenn ein Objekt einer Finalize-Methode enthält, ruft der Garbage Collector es vor der Freigabe des Objekts. Der Garbage Collector ist jedoch nicht erforderlich, um die Finalizer in allen Situationen aufrufen; z. B. die SuppressFinalize Methode explizit verhindert den Finalizer eines Objekts aufgerufen wird. Darüber hinaus muss der Garbage Collector keinen bestimmten Thread verwenden, um Objekte finalisieren, oder die Reihenfolge, in der Finalizer für Objekte, die andernfalls für die Garbagecollection verfügbar sind aufgerufen werden, aufeinander verweisen, zu gewährleisten.

In Szenarien, in denen Ressourcen zu einem bestimmten Zeitpunkt freigegeben werden müssen, können Klassen implementieren die IDisposable -Schnittstelle, die enthält die IDisposable.Dispose Methode, die Aufgaben in Verbindung mit Verwaltung und Bereinigung ausführt. Klassen, in denen Dispose müssen angeben, im Rahmen des Klassenvertrags Wenn Klassenconsumer der Methode aufrufen, um das Objekt zu bereinigen. Der Garbage Collector ist standardmäßig nicht der Fall, rufen Sie die Dispose Methode jedoch Implementierungen von der Dispose Methode kann Methoden aufrufen, der GC Klasse zum Anpassen des Verhaltens der Abschluss des Garbage Collectors.

Weitere Informationen zum Objekt abschließen und das Dispose-Muster finden Sie unter Cleaning Up Unmanaged Resources.

Der Garbage Collector in die common Language Runtime unterstützt das Altern von Objekten mithilfe von Generationen. Eine Generierung ist eine Maßeinheit für das relative Alter von Objekten im Arbeitsspeicher. Die Generierungsnummer bzw. das Alter eines Objekts gibt an, die Generierung, zu der ein Objekt gehört. Objekte erstellt Weitere vor kurzem sind Teil der neuere Generationen und niedrigere Generierungsnummern als der Reihe nach Objekten, die weiter oben in den Lebenszyklus der Anwendung erstellt haben. Objekte in der letzten Generierung sind im Bereich der Generation 0. Diese Implementierung des Garbage Collectors unterstützt drei Generationen von Objekten, die Generationen 0, 1 und 2. Sie können den Wert der Abrufen der MaxGeneration Eigenschaft, um die vom System unterstützte maximale Generationszahl bestimmt.

Objekt Alterungszeitraum ermöglicht Anwendungen, Ziel Garbagecollection auf einen bestimmten Satz von Generierungen, anstatt den Garbage Collector auf alle Generierungen auswerten. Der Überladungen der Collect Methode, die implizit enthalten eine generation Parameter ermöglichen Ihnen das Festlegen der älteste Generation, um die Garbage Collection bereinigt werden.

Beginnend mit der .NET Framework 4.6, der Garbage Collector unterstützt eine Latenzmodus ohne GC Region, die während der Ausführung des kritische Pfade verwendet werden kann, in die Garbage Collection kann eine app Leistung beeinträchtigen. Der Latenzmodus ohne GC Region erfordert, dass Sie die Größe des Arbeitsspeichers angeben, die ohne Störung durch den Garbage Collector zugeordnet werden können. Wenn die Laufzeit, dass der Arbeitsspeicher zugewiesen werden kann, wird die Common Language Runtime eine Garbagecollection nicht auszuführen, während der Ausführung von Code in den kritischen Pfad.

Sie definieren den Anfang den kritischen Pfad des keine GC-Region durch Aufrufen einer der Überladungen der der TryStartNoGCRegion. Sie geben das Ende seiner kritischen Pfad durch Aufrufen der EndNoGCRegion Methode.

Aufrufe können nicht geschachtelt die TryStartNoGCRegion Methode aufzurufen, und Sie sollten nur die EndNoGCRegion Methode, wenn die Laufzeit derzeit im Latenzmodus ohne GC-Region befindet. Das heißt, Sie sollten nicht aufrufen TryStartNoGCRegion mehrere Male (nach dem ersten Methodenaufruf nachfolgende Aufrufe werden nicht erfolgreich), und sollten Sie nicht erwarten, dass Aufrufe EndNoGCRegion erfolgreich ausgeführt werden kann nur verwendet werden, weil der erste Aufruf von TryStartNoGCRegion war erfolgreich.

Im folgenden Beispiel werden mehrere GC-Methoden Generation und Arbeitsspeicherinformationen über einen Block nicht verwendeter Objekte abrufen und an die Konsole ausgegeben wird. Nicht verwendete Objekte werden dann gesammelt, und die resultierende Gesamtspeichergröße werden 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();
            }
        }
    }
}

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 1.1
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1

Alle öffentlichen statischen Member ( Shared in Visual Basic) dieses Typs sind threadsicher. Die Threadsicherheit für Instanzmember ist nicht garantiert.

Zurück zum Anfang
Anzeigen: