GC Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Controla o coletor de lixo do sistema, um serviço que recupera automaticamente 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 seguinte utiliza vários métodos GC para obter informação de geração e memória sobre um bloco de objetos não utilizados e imprimi-la na consola. Os objetos não utilizados são então recolhidos e os totais de memória resultantes são exibidos.
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
Observações
Para mais informações sobre esta API, consulte Observações Suplementares da API para GC.
Propriedades
| Name | Description |
|---|---|
| MaxGeneration |
Obtém o número máximo de gerações que o sistema suporta atualmente. |
Métodos
| Name | Description |
|---|---|
| AddMemoryPressure(Int64) |
Informa o tempo de execução de uma grande alocação de memória não gerida que deve ser tida em conta ao agendar a recolha de lixo. |
| AllocateArray<T>(Int32, Boolean) |
Aloca um array. |
| AllocateUninitializedArray<T>(Int32, Boolean) |
Aloca um array saltando a inicialização zero, se possível. |
| CancelFullGCNotification() |
Cancela o registo de uma notificação de recolha de lixo. |
| Collect() |
Força uma recolha imediata de lixo de todas as gerações. |
| Collect(Int32, GCCollectionMode, Boolean, Boolean) |
Força uma recolha de lixo desde a geração 0 até uma geração especificada, num momento especificado por um GCCollectionMode valor, com valores que especificam se a coleção deve bloquear e compactar. |
| Collect(Int32, GCCollectionMode, Boolean) |
Força uma recolha de lixo desde a geração 0 até uma geração especificada, num momento especificado por um GCCollectionMode valor, com um valor que especifica se a coleção deve estar a bloquear. |
| Collect(Int32, GCCollectionMode) |
Força uma recolha de lixo desde a geração 0 até uma geração especificada, num momento especificado por um GCCollectionMode valor. |
| Collect(Int32) |
Força uma recolha imediata de lixo desde a geração 0 até uma geração especificada. |
| CollectionCount(Int32) |
Devolve o número de vezes que ocorreu recolha de lixo para a geração especificada de objetos. |
| EndNoGCRegion() |
Termina o modo de latência da região sem GC. |
| GetAllocatedBytesForCurrentThread() |
Obtém o número total de bytes alocados à thread atual desde o início da sua vida útil. |
| GetConfigurationVariables() |
Obtém as configurações usadas pelo coletor de lixo. |
| GetGCMemoryInfo() |
Obtém informação de memória de recolha de lixo. |
| GetGCMemoryInfo(GCKind) |
Obtém informação de memória de recolha de lixo. |
| GetGeneration(Object) |
Devolve o número de geração atual do objeto especificado. |
| GetGeneration(WeakReference) |
Devolve o número de geração atual do alvo de uma referência fraca especificada. |
| GetTotalAllocatedBytes(Boolean) |
Obtém a contagem dos bytes alocados ao longo da vida útil do processo. O valor retornado não inclui nenhuma alocação nativa. |
| GetTotalMemory(Boolean) |
Recupera o tamanho do heap, excluindo fragmentação. Por exemplo, se o tamanho total do heap GC for 100mb e a fragmentação, ou seja, o espaço ocupado por objetos livres, ocupar 40mb, esta API reportaria 60mb. Um parâmetro indica se este método pode esperar um curto intervalo antes de regressar, permitindo ao sistema recolher lixo e finalizar os objetos. |
| GetTotalPauseDuration() |
Obtém o tempo total pausado no GC desde o início do processo. |
| KeepAlive(Object) |
Faz referência ao objeto especificado, o que o torna inelegível para recolha de lixo desde o início da rotina atual até ao momento em que este método é chamado. |
| RefreshMemoryLimit() |
Instrui o Coletor de Lixo a reconfigurar-se detetando os vários limites de memória no sistema. |
| RegisterForFullGCNotification(Int32, Int32) |
Especifica que deve ser emitida uma notificação de recolha de lixo quando as condições favorecem a recolha total e quando a recolha estiver concluída. |
| RegisterNoGCRegionCallback(Int64, Action) |
Regista um callback a ser invocado quando uma certa quantidade de memória é alocada na região sem GC. |
| RemoveMemoryPressure(Int64) |
Informa o runtime de que a memória não gerida foi libertada e já não precisa de ser tida em conta ao agendar a recolha do lixo. |
| ReRegisterForFinalize(Object) |
Solicita que o sistema chame o finalizador para o objeto especificado para o qual SuppressFinalize(Object) já foi chamado. |
| SuppressFinalize(Object) |
Solicita que o runtime da linguagem comum não chame o finalizador para o objeto especificado. |
| TryStartNoGCRegion(Int64, Boolean) |
Tenta impedir a recolha 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 realiza uma recolha de lixo bloqueante completa caso não haja memória suficiente inicialmente disponível. |
| TryStartNoGCRegion(Int64, Int64, Boolean) |
Tenta impedir a recolha de lixo durante a execução de um caminho crítico se houver uma quantidade especificada de memória disponível para o monte de objetos grande e para o monte de objetos pequeno, e controla se o coletor de lixo faz uma recolha de lixo bloqueante completa se inicialmente não houver memória suficiente disponível. |
| TryStartNoGCRegion(Int64, Int64) |
Tentativas de impedir a recolha de lixo durante a execução de um caminho crítico se houver uma quantidade especificada de memória disponível para o heap de objetos grande e para o heap de objetos pequeno. |
| TryStartNoGCRegion(Int64) |
Tentativas de impedir a recolha de lixo durante a execução de um caminho crítico se houver uma quantidade especificada de memória disponível. |
| WaitForFullGCApproach() |
Devolve o estado de uma notificação registada para determinar se uma recolha de lixo completa e bloqueante pelo runtime de linguagem comum é iminente. |
| WaitForFullGCApproach(Int32) |
Devolve, num período de tempo limite especificado, o estado de uma notificação registada para determinar se uma recolha de lixo completa e bloqueante pelo runtime de linguagem comum é iminente. |
| WaitForFullGCApproach(TimeSpan) |
Devolve, num período de tempo limite especificado, o estado de uma notificação registada para determinar se uma recolha de lixo completa e bloqueante pelo runtime de linguagem comum é iminente. |
| WaitForFullGCComplete() |
Devolve o estado de uma notificação registada para determinar se uma recolha de lixo completa e bloqueante pelo runtime de linguagem comum foi concluída. |
| WaitForFullGCComplete(Int32) |
Devolve, num período de tempo especificado, o estado de uma notificação registada para determinar se uma recolha de lixo completa, bloqueando por linguagem comum que o runtime foi concluída. |
| WaitForFullGCComplete(TimeSpan) |
Devolve o estado de uma notificação registada sobre se a recolha de lixo bloqueada foi concluída. Posso esperar indefinidamente por uma coleção completa. |
| WaitForPendingFinalizers() |
Suspende o thread atual até que o thread que está a processar a fila de finalizadores esvazie essa fila. |