Compartir vía


GC Clase

Definición

Controla el recolector de elementos no utilizados del sistema, un servicio que recupera de forma automática la memoria que no se utiliza.

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

Ejemplos

En el ejemplo siguiente se usan varios métodos gc para obtener información de generación y memoria sobre un bloque de objetos no utilizados e imprimirlo en la consola. A continuación, se recopilan los objetos no utilizados y se muestran los totales de memoria resultantes.

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

Comentarios

Para obtener más información sobre esta API, consulte Comentarios complementarios de la API para GC.

Propiedades

MaxGeneration

Obtiene el número máximo de generaciones que el sistema admite en la actualidad.

Métodos

AddMemoryPressure(Int64)

Informa al tiempo de ejecución de una asignación grande de memoria no administrada que se debe tener en cuenta al programar la recolección de elementos no utilizados.

AllocateArray<T>(Int32, Boolean)

Asigna una matriz.

AllocateUninitializedArray<T>(Int32, Boolean)

Asigna una matriz mientras omite la inicialización cero, si es posible.

CancelFullGCNotification()

Cancela el registro de una notificación de recolección de elementos no utilizados.

Collect()

Fuerza a que se lleve a cabo una recolección de elementos no utilizados de todas las generaciones.

Collect(Int32)

Fuerza a que se lleve a cabo inmediatamente la recolección de elementos no utilizados desde la generación 0 hasta la generación especificada.

Collect(Int32, GCCollectionMode)

Fuerza una recolección de elementos no utilizados desde la generación 0 hasta la generación especificada, en el momento especificado por el valor GCCollectionMode.

Collect(Int32, GCCollectionMode, Boolean)

Fuerza una recolección de elementos no utilizados de generación 0 en una generación especificada, en un momento especificado por un valor de GCCollectionMode, con un valor que especifica si la recolección debe ser de bloqueo.

Collect(Int32, GCCollectionMode, Boolean, Boolean)

Fuerza una recolección de elementos no utilizados de generación 0 en una generación especificada, en un momento especificado por un valor de GCCollectionMode, con valores que especifican si la recolección debe ser de bloqueo y compactante.

CollectionCount(Int32)

Devuelve el número de veces que se ha producido la recolección de elementos no utilizados para la generación de objetos especificada.

EndNoGCRegion()

Finaliza el modo de no latencia en la región GC.

GetAllocatedBytesForCurrentThread()

Obtiene el número total de bytes asignados al subproceso actual desde el principio de su duración.

GetConfigurationVariables()

Obtiene las configuraciones usadas por el recolector de elementos no utilizados.

GetGCMemoryInfo()

Obtiene información de la memoria de la colección de elementos no utilizados.

GetGCMemoryInfo(GCKind)

Obtiene información de la memoria de la colección de elementos no utilizados.

GetGeneration(Object)

Devuelve el número de generación actual del objeto especificado.

GetGeneration(WeakReference)

Devuelve el número de generación actual del destino de una referencia débil especificada.

GetTotalAllocatedBytes(Boolean)

Obtiene un recuento de los bytes asignados durante la vigencia del proceso. El valor devuelto no incluye ninguna asignación nativa.

GetTotalMemory(Boolean)

Recupera el tamaño del montón excepto la fragmentación. Por ejemplo, si el tamaño total del montón de GC es de 100 mb y fragmentación, es decir, el espacio que ocupa los objetos libres, ocupa hasta 40 mb, esta API notificaría 60 mb. Un parámetro indica si este método puede esperar un breve intervalo de tiempo antes de regresar, para permitir que el sistema recoja los elementos no utilizados y finalice los objetos.

GetTotalPauseDuration()

Obtiene la cantidad total de tiempo en pausa en GC desde el principio del proceso.

KeepAlive(Object)

Hace referencia al objeto especificado, convirtiéndolo en un objeto no válido para la recolección de elementos no utilizados desde el principio de la rutina actual hasta el momento en que se llamó a este método.

RefreshMemoryLimit()

Indica al recolector de elementos no utilizados que vuelva a configurarse mediante la detección de los distintos límites de memoria en el sistema.

RegisterForFullGCNotification(Int32, Int32)

Especifica que debe emitirse una notificación de recolección de elementos no utilizados cuando las condiciones favorecen la recolección completa de elementos no utilizados y cuando se ha completado la recolección.

RegisterNoGCRegionCallback(Int64, Action)

Registra una devolución de llamada que se va a invocar cuando se asigna una determinada cantidad de memoria en la región sin GC.

RemoveMemoryPressure(Int64)

Informa al tiempo de ejecución de que se ha liberado la memoria no administrada y ya no se necesita tener en cuenta al programar la recolección de elementos no utilizados.

ReRegisterForFinalize(Object)

Solicita que el sistema llame al finalizador del objeto especificado, para el que previamente se ha llamado a SuppressFinalize(Object).

SuppressFinalize(Object)

Solicita que Common Language Runtime no llame al finalizador del objeto especificado.

TryStartNoGCRegion(Int64)

Intenta suspender la recolección de elementos durante la ejecución de una ruta crítica si una cantidad específica de memoria está disponible.

TryStartNoGCRegion(Int64, Boolean)

Intenta suspender la recolección de elementos no usados durante la ejecución de una ruta crítica si una cantidad especificada de memoria está disponible y controla si el recolector de elementos no usados realiza una recolección de elementos no usados de bloqueo completa si no hay suficiente memoria disponible inicialmente.

TryStartNoGCRegion(Int64, Int64)

Intenta suspender la recolección de elementos no usados durante la ejecución de una ruta crítica si una cantidad específica de memoria está disponible para los montones de objetos pequeños y grandes.

TryStartNoGCRegion(Int64, Int64, Boolean)

Intenta suspender la recolección de elementos no usados durante la ejecución de una ruta crítica si una cantidad especificada de memoria está disponible para los montones de objetos grandes y pequeños, y controla si el recolector de elementos no usados realiza una recolección de elementos no usados de bloqueo completa si no hay suficiente memoria disponible inicialmente.

WaitForFullGCApproach()

Devuelve el estado de una notificación registrada para determinar si es inminente una recolección completa de elementos no utilizados bloqueada por parte de Common Language Runtime.

WaitForFullGCApproach(Int32)

Devuelve el estado de una notificación registrada, en un tiempo de espera especificado, para determinar si una recolección completa de elementos no utilizados bloqueada por parte de Common Language Runtime es inminente.

WaitForFullGCApproach(TimeSpan)

Devuelve el estado de una notificación registrada, en un tiempo de espera especificado, para determinar si una recolección completa de elementos no utilizados bloqueada por parte de Common Language Runtime es inminente.

WaitForFullGCComplete()

Devuelve el estado de una notificación registrada para determinar si se ha completado una recolección completa de elementos no utilizados bloqueada por parte de Common Language Runtime.

WaitForFullGCComplete(Int32)

Devuelve el estado de una notificación registrada, en un tiempo de espera especificado, para determinar si se ha completado una recolección completa de elementos no utilizados bloqueada por parte de Common Language Runtime.

WaitForFullGCComplete(TimeSpan)

Devuelve el estado de una notificación registrada sobre si se ha completado una recolección de elementos no utilizados de bloqueo. Puede esperar indefinidamente para una colección completa.

WaitForPendingFinalizers()

Suspende el subproceso actual hasta que el subproceso que está procesando la cola de finalizadores vacíe dicha cola.

Se aplica a

Consulte también