Partilhar via


GC Classe

Definição

Controla o coletor de lixo do sistema, um serviço que recupera automaticamente a memória não utilizada.

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
Herança
GC

Exemplos

O exemplo a seguir usa vários métodos GC para obter informações de geração e memória sobre um bloco de objetos não utilizados e imprimi-lo no console. Os objetos não utilizados são então coletados e os totais de memória resultantes são exibidos.

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

Comentários

Para obter mais informações sobre essa API, consulte Comentários sobre a API Complementar para GC.

Propriedades

MaxGeneration

Obtém o número máximo de gerações que o sistema dá suporte atualmente.

Métodos

AddMemoryPressure(Int64)

Informa o runtime de uma alocação grande de memória não gerenciada que deve ser levada em conta durante o agendamento da coleta de lixo.

AllocateArray<T>(Int32, Boolean)

Aloca uma matriz.

AllocateUninitializedArray<T>(Int32, Boolean)

Aloca uma matriz ao ignorar a inicialização zero, se possível.

CancelFullGCNotification()

Cancela o registro de uma notificação de coleta de lixo.

Collect()

Força uma coleta de lixo imediata de todas as gerações.

Collect(Int32)

Força uma coleta de lixo imediata da geração 0 por meio de uma geração especificada.

Collect(Int32, GCCollectionMode)

Força uma coleta de lixo imediata da geração 0 por meio de uma geração especificada, em uma hora especificada por um valor GCCollectionMode.

Collect(Int32, GCCollectionMode, Boolean)

Força uma coleta de lixo da geração 0 até uma geração especificada, em um momento especificado por um valor de GCCollectionMode, com um valor que especifica se a coleção deve ser de bloqueio.

Collect(Int32, GCCollectionMode, Boolean, Boolean)

Força uma coleta de lixo da geração 0 até uma geração especificada, em um momento especificado por um valor de GCCollectionMode, com valores que especificam se a coleta deve ser de bloqueio e compactação.

CollectionCount(Int32)

Retorna o número de vezes em que ocorreu a coleta de lixo para a geração de objetos especificada.

EndNoGCRegion()

Encerra o modo de latência de região sem GC.

GetAllocatedBytesForCurrentThread()

Obtém o número total de bytes alocados ao thread atual desde o início de seu tempo de vida.

GetConfigurationVariables()

Obtém as configurações usadas pelo coletor de lixo.

GetGCMemoryInfo()

Obtém informações de memória da coleta de lixo.

GetGCMemoryInfo(GCKind)

Obtém informações de memória da coleta de lixo.

GetGeneration(Object)

Retorna o número de geração atual do objeto especificado.

GetGeneration(WeakReference)

Retorna o número de geração atual do destino de uma referência fraca especificada.

GetTotalAllocatedBytes(Boolean)

Obtém uma contagem dos bytes alocados durante o tempo de vida do processo. O valor retornado não inclui nenhuma alocação nativa.

GetTotalMemory(Boolean)

Recupera o tamanho do heap, excluindo a fragmentação. Por exemplo, se o tamanho total do heap de GC for de 100 mb e a fragmentação, ou seja, o espaço ocupado por objetos livres ocupa 40 mb, essa API relataria 60 mb. Um parâmetro indica se esse método pode esperar um breve intervalo antes de retornar, para permitir que o sistema colete o lixo e finalize os objetos.

GetTotalPauseDuration()

Obtém a quantidade total de tempo pausado no GC desde o início do processo.

KeepAlive(Object)

Referencia o objeto especificado, o que o torna não qualificado para a coleta de lixo, do início da rotina atual ao ponto em que esse método é chamado.

RefreshMemoryLimit()

Instrui o Coletor de Lixo a se reconfigurar detectando os vários limites de memória no sistema.

RegisterForFullGCNotification(Int32, Int32)

Especifica que uma notificação de coleta de lixo deve ser gerada quando as condições favorecerem a coleta de lixo completa e quando a coleção tiver sido concluída.

RegisterNoGCRegionCallback(Int64, Action)

Registra um retorno de chamada a ser invocado quando uma determinada quantidade de memória é alocada na região sem GC.

RemoveMemoryPressure(Int64)

Informa ao runtime que memória não gerenciada foi liberada e não precisa ser considerada ao agendar a coleta de lixo.

ReRegisterForFinalize(Object)

Solicita que o sistema chame o finalizador do objeto especificado para o qual SuppressFinalize(Object) foi chamado anteriormente.

SuppressFinalize(Object)

Solicita que o Common Language Runtime não chame o finalizador do objeto especificado.

TryStartNoGCRegion(Int64)

Tentar desabilitar a coleta de lixo durante a execução de um caminho crítico se uma quantidade especificada de memória estiver disponível.

TryStartNoGCRegion(Int64, Boolean)

Tenta não permitir a coleta de lixo durante a execução de um caminho crítico se houver uma quantidade especificada de memória disponível e controla se o coletor de lixo faz uma coleta de lixo de bloqueio completo se nenhuma memória suficiente estiver inicialmente disponível.

TryStartNoGCRegion(Int64, Int64)

Tentar desabilitar a coleta de lixo durante a execução de um caminho crítico se uma quantidade especificada de memória estiver disponível para o heap de objeto grande e o heap de objeto pequeno.

TryStartNoGCRegion(Int64, Int64, Boolean)

Tenta não permitir a coleta de lixo durante a execução de um caminho crítico se há uma quantidade especificada de memória disponível para o heap de objetos grandes e o heap de objetos pequenos e controla se o coletor de lixo faz uma coleta de lixo de bloqueio completo se nenhuma memória suficiente está inicialmente disponível.

WaitForFullGCApproach()

Retorna o status de uma notificação registrada para determinar se uma coleção completa de lixo de bloqueio realizada pelo Common Language Runtime foi concluída.

WaitForFullGCApproach(Int32)

Retorna, em um período de tempo limite especificado, o status de uma notificação registrada para determinar se uma coleta de lixo de bloqueio completa executada pelo Common Language Runtime é iminente.

WaitForFullGCApproach(TimeSpan)

Retorna, em um período de tempo limite especificado, o status de uma notificação registrada para determinar se uma coleta de lixo de bloqueio completa executada pelo Common Language Runtime é iminente.

WaitForFullGCComplete()

Retorna o status de uma notificação registrada para determinar se uma coleta completa de lixo de bloqueio realizada pelo Common Language Runtime foi concluída.

WaitForFullGCComplete(Int32)

Retorna, em um período de tempo limite especificado, o status de uma notificação registrada para determinar se uma coleta de lixo de bloqueio completo executada pelo Common Language Runtime foi concluída.

WaitForFullGCComplete(TimeSpan)

Retorna o status de uma notificação registrada sobre se uma coleta de lixo de bloqueio foi concluída. Pode esperar indefinidamente por uma coleção completa.

WaitForPendingFinalizers()

Suspende o thread atual até que o thread que está processando a fila de finalizadores tenha esvaziado essa fila.

Aplica-se a

Confira também