Udostępnij za pośrednictwem


GC Klasa

Definicja

Steruje systemowym modułem odśmiecającym pamięci, usługą, która automatycznie odzyskuje nieużywaną pamięć.

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
Dziedziczenie
GC

Przykłady

W poniższym przykładzie użyto kilku metod GC, aby uzyskać informacje o generowaniu i pamięci dotyczące bloku nieużywanych obiektów i wydrukować je w konsoli. Następnie zbierane są nieużywane obiekty, a wynikowe sumy pamięci są wyświetlane.

using namespace System;
const long maxGarbage = 1000;
ref class MyGCCollectClass
{
public:
   void MakeSomeGarbage()
   {
      Version^ vt;
      for ( int i = 0; i < maxGarbage; i++ )
      {
         
         // Create objects and release them to fill up memory
         // with unused objects.
         vt = gcnew Version;

      }
   }

};

int main()
{
   MyGCCollectClass^ myGCCol = gcnew 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 ) );
}
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

Uwagi

Aby uzyskać więcej informacji na temat tego interfejsu API, zobacz Uwagi dotyczące dodatkowego interfejsu API dla usługi GC.

Właściwości

MaxGeneration

Pobiera maksymalną liczbę generacji, które obecnie obsługuje system.

Metody

AddMemoryPressure(Int64)

Informuje środowisko uruchomieniowe dużej alokacji niezarządzanej pamięci, którą należy wziąć pod uwagę podczas planowania odzyskiwania pamięci.

AllocateArray<T>(Int32, Boolean)

Przydziela tablicę.

AllocateUninitializedArray<T>(Int32, Boolean)

Przydziela tablicę podczas pomijania inicjowania zerowego, jeśli to możliwe.

CancelFullGCNotification()

Anuluje rejestrację powiadomienia o odśmieceniu pamięci.

Collect()

Wymusza natychmiastowe odzyskiwanie pamięci wszystkich pokoleń.

Collect(Int32)

Wymusza natychmiastowe odzyskiwanie pamięci od generacji 0 do określonej generacji.

Collect(Int32, GCCollectionMode)

Wymusza odzyskiwanie pamięci z generacji 0 przez określoną generację GCCollectionMode w czasie określonym przez wartość.

Collect(Int32, GCCollectionMode, Boolean)

Wymusza odzyskiwanie pamięci z generacji 0 przez określoną generację, w czasie określonym przez GCCollectionMode wartość, z wartością określającą, czy kolekcja powinna być zablokowana.

Collect(Int32, GCCollectionMode, Boolean, Boolean)

Wymusza odzyskiwanie pamięci z generacji 0 przez określoną generację GCCollectionMode , w czasie określonym przez wartość, z wartościami określającymi, czy kolekcja powinna być blokowana i kompaktowana.

CollectionCount(Int32)

Zwraca liczbę przypadków wystąpienia odzyskiwania pamięci dla określonej generacji obiektów.

EndNoGCRegion()

Kończy tryb opóźnienia regionu GC.

GetAllocatedBytesForCurrentThread()

Pobiera łączną liczbę bajtów przydzielonych do bieżącego wątku od początku okresu istnienia.

GetConfigurationVariables()

Pobiera konfiguracje używane przez moduł odśmieceń pamięci.

GetGCMemoryInfo()

Pobiera informacje o pamięci odzyskiwania pamięci.

GetGCMemoryInfo(GCKind)

Pobiera informacje o pamięci odzyskiwania pamięci.

GetGeneration(Object)

Zwraca bieżącą liczbę generacji określonego obiektu.

GetGeneration(WeakReference)

Zwraca bieżącą liczbę generowania elementu docelowego określonego słabego odwołania.

GetTotalAllocatedBytes(Boolean)

Pobiera liczbę bajtów przydzielonych w okresie istnienia procesu. Zwrócona wartość nie obejmuje żadnych alokacji natywnych.

GetTotalMemory(Boolean)

Pobiera rozmiar sterty z wyłączeniem fragmentacji. Jeśli na przykład łączny rozmiar sterty GC to 100 mb i fragmentacja, tj. miejsce zajęte przez wolne obiekty, zajmuje 40 mb, ten interfejs API zgłosi 60 mb. Parametr wskazuje, czy ta metoda może poczekać krótki interwał przed powrotem, aby umożliwić systemowi zbieranie pamięci i finalizowanie obiektów.

GetTotalPauseDuration()

Pobiera całkowity czas wstrzymania w usłudze GC od początku procesu.

KeepAlive(Object)

Odwołuje się do określonego obiektu, co sprawia, że nie kwalifikuje się do odzyskiwania pamięci od początku bieżącej procedury do punktu, w którym jest wywoływana ta metoda.

RefreshMemoryLimit()

Instruuje moduł odśmiecania pamięci, aby ponownie skonfigurować się, wykrywając różne limity pamięci w systemie.

RegisterForFullGCNotification(Int32, Int32)

Określa, że powiadomienie odzyskiwania pamięci powinno zostać podniesione, gdy warunki faworyzują pełne odzyskiwanie pamięci i po zakończeniu odzyskiwania pamięci.

RegisterNoGCRegionCallback(Int64, Action)

Rejestruje wywołanie zwrotne, które ma być wywoływane, gdy określona ilość pamięci jest przydzielana w regionie bez GC.

RemoveMemoryPressure(Int64)

Informuje środowisko uruchomieniowe o zwolnieniu niezarządzanej pamięci i nie musi być już brane pod uwagę podczas planowania odzyskiwania pamięci.

ReRegisterForFinalize(Object)

Żąda, aby system wywołał finalizator dla określonego obiektu, dla którego SuppressFinalize(Object) został wcześniej wywołany.

SuppressFinalize(Object)

Żąda, aby środowisko uruchomieniowe języka wspólnego nie wywoływać finalizatora dla określonego obiektu.

TryStartNoGCRegion(Int64)

Próbuje uniemożliwić odzyskiwanie pamięci podczas wykonywania ścieżki krytycznej, jeśli jest dostępna określona ilość pamięci.

TryStartNoGCRegion(Int64, Boolean)

Próbuje uniemożliwić odzyskiwanie pamięci podczas wykonywania ścieżki krytycznej, jeśli jest dostępna określona ilość pamięci, i określa, czy moduł odśmiecanie pamięci wykonuje pełne blokowanie odzyskiwania pamięci, jeśli początkowo nie jest dostępna wystarczająca ilość pamięci.

TryStartNoGCRegion(Int64, Int64)

Próbuje uniemożliwić odzyskiwanie pamięci podczas wykonywania ścieżki krytycznej, jeśli określona ilość pamięci jest dostępna dla dużego sterty obiektu i stertę małych obiektów.

TryStartNoGCRegion(Int64, Int64, Boolean)

Próbuje uniemożliwić odzyskiwanie pamięci podczas wykonywania ścieżki krytycznej, jeśli określona ilość pamięci jest dostępna dla stert dużego obiektu i stertę małych obiektów, a także określa, czy moduł odśmiecanie pamięci wykonuje pełne blokowanie odzyskiwania pamięci, jeśli początkowo nie jest dostępna wystarczająca ilość pamięci.

WaitForFullGCApproach()

Zwraca stan zarejestrowanego powiadomienia w celu określenia, czy pełne blokowanie odzyskiwania pamięci przez środowisko uruchomieniowe języka wspólnego jest nieuchronne.

WaitForFullGCApproach(Int32)

Zwraca w określonym przedziale czasu stan zarejestrowanego powiadomienia w celu określenia, czy pełne blokowanie odzyskiwania pamięci przez środowisko uruchomieniowe języka wspólnego jest nieuchronne.

WaitForFullGCApproach(TimeSpan)

Zwraca w określonym przedziale czasu stan zarejestrowanego powiadomienia w celu określenia, czy pełne blokowanie odzyskiwania pamięci przez środowisko uruchomieniowe języka wspólnego jest nieuchronne.

WaitForFullGCComplete()

Zwraca stan zarejestrowanego powiadomienia w celu określenia, czy ukończono pełne blokowanie odzyskiwania pamięci przez środowisko uruchomieniowe języka wspólnego.

WaitForFullGCComplete(Int32)

Zwraca w określonym przedziale czasu stan zarejestrowanego powiadomienia w celu określenia, czy pełne blokowanie odzyskiwania pamięci przez język wspólny zostało ukończone.

WaitForFullGCComplete(TimeSpan)

Zwraca stan zarejestrowanego powiadomienia o tym, czy blokowanie odzyskiwania pamięci zostało zakończone. Może czekać bezterminowo na pełną kolekcję.

WaitForPendingFinalizers()

Zawiesza bieżący wątek, dopóki wątek, który przetwarza kolejkę finalizatorów, opróżnia kolejkę.

Dotyczy

Zobacz też