GC Třída

Definice

Řídí systém uvolňování paměti, službu, která automaticky uvolní nevyužitou paměť.

public ref class GC abstract sealed
public ref class GC sealed
public static class GC
public sealed class GC
type GC = class
Public Class GC
Public NotInheritable Class GC
Dědičnost
GC

Příklady

Následující příklad používá několik metod GC získat generování a paměť informace o bloku nepoužívaných objektů a vytisknout je do konzoly. Následně se shromažďují nepoužívané objekty a zobrazí se výsledné součty paměti.

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();
            }
        }
    }
}
open System

let maxGarbage = 1000

type MyGCCollectClass() =
    member _.MakeSomeGarbage() =
        for _ = 1 to maxGarbage do
            // Create objects and release them to fill up memory with unused objects.
            Version() |> ignore

[<EntryPoint>]
let main _ =
    let myGCCol = MyGCCollectClass()

    // Determine the maximum number of generations the system
    // garbage collector currently supports.
    printfn $"The highest generation is {GC.MaxGeneration}"

    myGCCol.MakeSomeGarbage()

    // Determine which generation myGCCol object is stored in.
    printfn $"Generation: {GC.GetGeneration myGCCol}"

    // Determine the best available approximation of the number
    // of bytes currently allocated in managed memory.
    printfn $"Total Memory: {GC.GetTotalMemory false}"

    // Perform a collection of generation 0 only.
    GC.Collect 0

    // Determine which generation myGCCol object is stored in.
    printfn $"Generation: {GC.GetGeneration myGCCol}"

    printfn $"Total Memory: {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.
    printfn $"Generation: {GC.GetGeneration myGCCol}"
    printfn $"Total Memory: {GC.GetTotalMemory false}"

    0
Namespace GCCollectInt_Example
    Class MyGCCollectClass
        Private maxGarbage As Long = 10000

        Public Shared Sub Main()
            Dim myGCCol As 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()

        End Sub


        Sub MakeSomeGarbage()
            Dim vt As Version

            Dim i As Integer
            For i = 0 To maxGarbage - 1
                'Create objects and release them to fill up memory
                'with unused objects.
                vt = New Version
            Next i
        End Sub
    End Class
End Namespace

Poznámky

Další informace o tomto rozhraní API naleznete v tématu Doplňkové poznámky k rozhraní API pro GC.

Vlastnosti

Name Description
MaxGeneration

Získá maximální počet generací, které systém aktuálně podporuje.

Metody

Name Description
AddMemoryPressure(Int64)

Informuje modul runtime o velkém přidělení nespravované paměti, které je třeba vzít v úvahu při plánování uvolňování paměti.

AllocateArray<T>(Int32, Boolean)

Přidělí pole.

AllocateUninitializedArray<T>(Int32, Boolean)

Pokud je to možné, přidělí pole při vynechání inicializace nuly.

CancelFullGCNotification()

Zruší registraci oznámení o uvolňování paměti.

Collect()

Vynutí okamžité uvolňování paměti všech generací.

Collect(Int32, GCCollectionMode, Boolean, Boolean)

Vynutí uvolňování paměti z generace 0 do zadané generace v době určené GCCollectionMode hodnotou s hodnotami, které určují, zda má kolekce blokovat a komprimovat.

Collect(Int32, GCCollectionMode, Boolean)

Vynutí uvolňování paměti z generace 0 do zadané generace v okamžiku určeném GCCollectionMode hodnotou s hodnotou určující, zda má být kolekce blokovaná.

Collect(Int32, GCCollectionMode)

Vynutí uvolňování paměti z generace 0 do zadané generace v okamžiku určeném GCCollectionMode hodnotou.

Collect(Int32)

Vynutí okamžité uvolňování paměti z generace 0 prostřednictvím zadané generace.

CollectionCount(Int32)

Vrátí počet výskytů uvolňování paměti pro zadané generování objektů.

EndNoGCRegion()

Ukončí režim latence oblasti GC.

GetAllocatedBytesForCurrentThread()

Získá celkový počet bajtů přidělených aktuálnímu vláknu od začátku jeho životnosti.

GetConfigurationVariables()

Získá konfigurace používané uvolňováním paměti.

GetGCMemoryInfo()

Získá informace o paměti uvolňování paměti.

GetGCMemoryInfo(GCKind)

Získá informace o paměti uvolňování paměti.

GetGeneration(Object)

Vrátí číslo aktuální generace zadaného objektu.

GetGeneration(WeakReference)

Vrátí číslo aktuální generace cíle zadaného slabého odkazu.

GetTotalAllocatedBytes(Boolean)

Získá počet bajtů přidělených v průběhu životnosti procesu. Vrácená hodnota nezahrnuje žádné nativní přidělení.

GetTotalMemory(Boolean)

Načte velikost haldy s výjimkou fragmentace. Pokud je například celková velikost haldy GC 100 mb a fragmentace, tj. mezera zabírající volné objekty, zabírá 40 mb, toto rozhraní API by hlásilo 60 mb. Parametr označuje, zda tato metoda může počkat krátký interval před vrácením, aby systém mohl shromažďovat uvolňování paměti a finalizovat objekty.

GetTotalPauseDuration()

Získá celkovou dobu pozastavení v GC od začátku procesu.

KeepAlive(Object)

Odkazuje na zadaný objekt, díky kterému je způsobilý pro uvolňování paměti od začátku aktuální rutiny do bodu, kde je tato metoda volána.

RefreshMemoryLimit()

Dá pokyn systému uvolňování paměti, aby se překonfiguroval tak, že zjistí různá omezení paměti v systému.

RegisterForFullGCNotification(Int32, Int32)

Určuje, že má být vyvolána oznámení o uvolňování paměti, když podmínky upřednostňují úplné uvolňování paměti a po dokončení kolekce.

RegisterNoGCRegionCallback(Int64, Action)

Zaregistruje zpětné volání, které se má vyvolat, když je v žádné oblasti GC přiděleno určité množství paměti.

RemoveMemoryPressure(Int64)

Informuje modul runtime, že byla vydána nespravovaná paměť a při plánování uvolňování paměti už není nutné brát v úvahu.

ReRegisterForFinalize(Object)

Požaduje, aby systém volal finalizační metodu pro zadaný objekt, pro který SuppressFinalize(Object) byl dříve volána.

SuppressFinalize(Object)

Vyžaduje, aby modul CLR (Common Language Runtime) nevolal finalizátor zadaného objektu.

TryStartNoGCRegion(Int64, Boolean)

Pokusí se zakázat uvolňování paměti během provádění kritické cesty, pokud je k dispozici zadané množství paměti, a určuje, zda uvolňování paměti provádí úplné blokování uvolňování paměti, pokud není zpočátku k dispozici dostatek paměti.

TryStartNoGCRegion(Int64, Int64, Boolean)

Pokusí se zakázat uvolňování paměti během provádění kritické cesty, pokud je pro haldu velkého objektu a haldy malého objektu k dispozici určité množství paměti, a určuje, zda uvolňování paměti provádí úplné blokování uvolňování paměti, pokud není zpočátku k dispozici dostatek paměti.

TryStartNoGCRegion(Int64, Int64)

Pokusí se zakázat uvolňování paměti během provádění kritické cesty, pokud je pro velkou haldu objektu a haldu malého objektu k dispozici zadané množství paměti.

TryStartNoGCRegion(Int64)

Pokusí se zakázat uvolňování paměti během provádění kritické cesty, pokud je k dispozici zadané množství paměti.

WaitForFullGCApproach()

Vrátí stav registrovaného oznámení pro určení, zda je úplné blokování uvolňování paměti modulem CLR (Common Language Runtime).

WaitForFullGCApproach(Int32)

Vrátí stav registrovaného oznámení v zadaném časovém limitu, který určuje, jestli je úplné blokování uvolňování paměti modulem CLR (Common Language Runtime) bezprostředně zablokované.

WaitForFullGCApproach(TimeSpan)

Vrátí stav registrovaného oznámení v zadaném časovém limitu, který určuje, jestli je úplné blokování uvolňování paměti modulem CLR (Common Language Runtime) bezprostředně zablokované.

WaitForFullGCComplete()

Vrátí stav registrovaného oznámení pro určení, jestli se dokončilo úplné blokování uvolňování paměti modulem CLR (Common Language Runtime).

WaitForFullGCComplete(Int32)

Vrátí stav registrovaného oznámení v zadaném časovém limitu pro určení, jestli úplné blokování uvolňování paměti běžným jazykem, které modul runtime dokončil.

WaitForFullGCComplete(TimeSpan)

Vrátí stav registrovaného oznámení o tom, jestli se dokončilo blokování uvolňování paměti. Může čekat na neomezenou dobu na úplnou kolekci.

WaitForPendingFinalizers()

Pozastaví aktuální vlákno, dokud vlákno, které zpracovává frontu finalizačních metod, nevyprázdní tuto frontu.

Platí pro

Viz také