GC Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Controla el recolector de elementos no utilizados del sistema, un servicio que reclama automáticamente la memoria no 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
- 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 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 api para GC.
Propiedades
| Nombre | Description |
|---|---|
| MaxGeneration |
Obtiene el número máximo de generaciones que admite el sistema actualmente. |
Métodos
| Nombre | Description |
|---|---|
| AddMemoryPressure(Int64) |
Informa al tiempo de ejecución de una gran asignación 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 al omitir la inicialización cero, si es posible. |
| CancelFullGCNotification() |
Cancela el registro de una notificación de recolección de elementos no utilizados. |
| Collect() |
Fuerza una recolección inmediata de elementos no utilizados de todas las generaciones. |
| Collect(Int32, GCCollectionMode, Boolean, Boolean) |
Fuerza una recolección de elementos no utilizados de la generación 0 a una generación especificada, en un momento especificado por un GCCollectionMode valor, con valores que especifican si la recolección debe bloquearse y compactarse. |
| Collect(Int32, GCCollectionMode, Boolean) |
Fuerza una recolección de elementos no utilizados de la generación 0 a una generación especificada, en un momento especificado por un GCCollectionMode valor, con un valor que especifica si la recolección debe bloquearse. |
| Collect(Int32, GCCollectionMode) |
Fuerza una recolección de elementos no utilizados de la generación 0 a una generación especificada, en un momento especificado por un GCCollectionMode valor. |
| Collect(Int32) |
Fuerza una recolección inmediata de elementos no utilizados de la generación 0 a una generación especificada. |
| 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 latencia de región no gc. |
| GetAllocatedBytesForCurrentThread() |
Obtiene el número total de bytes asignados al subproceso actual desde el principio de su vigencia. |
| GetConfigurationVariables() |
Obtiene las configuraciones usadas por el recolector de elementos no utilizados. |
| GetGCMemoryInfo() |
Obtiene información de memoria de recolección de elementos no utilizados. |
| GetGCMemoryInfo(GCKind) |
Obtiene información de memoria de recolecció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 duración del proceso. El valor devuelto no incluye ninguna asignación nativa. |
| GetTotalMemory(Boolean) |
Recupera el tamaño del montón excluyendo la fragmentación. Por ejemplo, si el tamaño total del montón de GC es de 100 mb y la fragmentación, es decir, el espacio ocupado por objetos libres ocupa 40 mb, esta API notificaría 60 mb. Un parámetro indica si este método puede esperar un breve intervalo antes de devolver, para permitir que el sistema recopile 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, lo que hace que sea apto para la recolección de elementos no utilizados desde el principio de la rutina actual hasta el punto en el que se llama 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 se debe generar 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 no GC. |
| RemoveMemoryPressure(Int64) |
Informa al tiempo de ejecución de que se ha liberado la memoria no administrada y que ya no es necesario tener en cuenta al programar la recolección de elementos no utilizados. |
| ReRegisterForFinalize(Object) |
Solicita que el sistema llame al finalizador para el objeto especificado para el que SuppressFinalize(Object) se ha llamado anteriormente. |
| SuppressFinalize(Object) |
Solicita que Common Language Runtime no llame al finalizador para el objeto especificado. |
| TryStartNoGCRegion(Int64, Boolean) |
Intenta denegar la recolección de elementos no utilizados durante la ejecución de una ruta de acceso crítica si hay disponible una cantidad especificada de memoria y controla si el recolector de elementos no utilizados realiza una recolección de elementos no utilizados de bloqueo completa si no hay suficiente memoria disponible inicialmente. |
| TryStartNoGCRegion(Int64, Int64, Boolean) |
Intenta denegar la recolección de elementos no utilizados durante la ejecución de una ruta de acceso crítica si hay disponible una cantidad especificada de memoria para el montón de objetos grandes y el montón de objetos pequeños, y controla si el recolector de elementos no utilizados bloquea completamente la recolección de elementos no utilizados si no hay suficiente memoria disponible inicialmente. |
| TryStartNoGCRegion(Int64, Int64) |
Intenta denegar la recolección de elementos no utilizados durante la ejecución de una ruta de acceso crítica si hay disponible una cantidad especificada de memoria para el montón de objetos grandes y el montón de objetos pequeños. |
| TryStartNoGCRegion(Int64) |
Intenta denegar la recolección de elementos no utilizados durante la ejecución de una ruta de acceso crítica si hay disponible una cantidad especificada de memoria. |
| WaitForFullGCApproach() |
Devuelve el estado de una notificación registrada para determinar si una recolección de elementos no utilizados de bloqueo completa por Common Language Runtime es inminente. |
| WaitForFullGCApproach(Int32) |
Devuelve, en un período de tiempo de espera especificado, el estado de una notificación registrada para determinar si una recolección de elementos no utilizados de bloqueo completa por Common Language Runtime es inminente. |
| WaitForFullGCApproach(TimeSpan) |
Devuelve, en un período de tiempo de espera especificado, el estado de una notificación registrada para determinar si una recolección de elementos no utilizados de bloqueo completa por Common Language Runtime es inminente. |
| WaitForFullGCComplete() |
Devuelve el estado de una notificación registrada para determinar si se ha completado una recolección de elementos no utilizados de bloqueo completa por Common Language Runtime. |
| WaitForFullGCComplete(Int32) |
Devuelve, en un período de tiempo de espera especificado, el estado de una notificación registrada para determinar si se ha completado una recolección completa de elementos no utilizados que bloquea la recolección de elementos no utilizados por Common Language. |
| 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 procesa la cola de finalizadores ha vaciado esa cola. |