Exportar (0) Imprimir
Expandir todo
Este artículo se tradujo de forma manual. Mueva el puntero sobre las frases del artículo para ver el texto original.
Traducción
Original

GC (Clase)

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

Espacio de nombres:  System
Ensamblado:  mscorlib (en mscorlib.dll)

public static class GC

El tipo GC expone los siguientes miembros.

  NombreDescripción
Propiedad públicaMiembro estáticoCompatible con XNA FrameworkMaxGenerationObtiene el número máximo de generaciones que el sistema admite en la actualidad.
Arriba

  NombreDescripción
Método públicoMiembro estáticoAddMemoryPressureInforma al motor en 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.
Método públicoMiembro estáticoCancelFullGCNotificationCancela el registro de una notificación de recolección de elementos no utilizados.
Método públicoMiembro estáticoCompatible con XNA FrameworkCollect()Obliga a que se lleve a cabo una recolección de elementos no utilizados de todas las generaciones.
Método públicoMiembro estáticoCollect(Int32)Obliga a que se lleve a cabo inmediatamente la recolección de elementos no utilizados desde la generación cero hasta la generación especificada.
Método públicoMiembro estáticoCollect(Int32, GCCollectionMode)Fuerza una recolección de elementos no utilizados desde la generación cero hasta la generación especificada, en el momento especificado por el valor GCCollectionMode.
Método públicoMiembro estáticoCollectionCountDevuelve el número de veces que se ha producido la recolección de elementos no utilizados para la generación de objetos especificada.
Método públicoMiembro estáticoGetGeneration(Object)Devuelve el número de generación actual del objeto especificado.
Método públicoMiembro estáticoGetGeneration(WeakReference)Devuelve el número de generación actual del destino de una referencia débil especificada.
Método públicoMiembro estáticoCompatible con XNA FrameworkGetTotalMemoryRecupera el número de bytes que se considera que están asignados en la actualidad. 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.
Método públicoMiembro estáticoCompatible con XNA Frameworka0fwz4wc.PortableClassLibrary(es-es,VS.100).gifKeepAliveHace 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.
Método públicoMiembro estáticoRegisterForFullGCNotificationEspecifica 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.
Método públicoMiembro estáticoRemoveMemoryPressureInforma al motor en 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.
Método públicoMiembro estáticoCompatible con XNA Frameworka0fwz4wc.PortableClassLibrary(es-es,VS.100).gifReRegisterForFinalizeSolicita que el sistema llame al finalizador del objeto especificado, para el que previamente se ha llamado a SuppressFinalize.
Método públicoMiembro estáticoCompatible con XNA Frameworka0fwz4wc.PortableClassLibrary(es-es,VS.100).gifSuppressFinalizeSolicita que el sistema no llame al finalizador del objeto especificado.
Método públicoMiembro estáticoWaitForFullGCApproach()Devuelve el estado de una notificación registrada para determinar si una recolección completa de elementos no utilizados por parte de Common Language Runtime es inminente.
Método públicoMiembro estáticoWaitForFullGCApproach(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 por parte de Common Language Runtime es inminente.
Método públicoMiembro estáticoWaitForFullGCComplete()Devuelve el estado de una notificación registrada para determinar si se ha completado una recolección completa de elementos no utilizados por parte de Common Language Runtime.
Método públicoMiembro estáticoWaitForFullGCComplete(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 por parte de Common Language Runtime.
Método públicoMiembro estáticoCompatible con XNA FrameworkWaitForPendingFinalizersSuspende el subproceso actual hasta que el subproceso que está procesando la cola de finalizadores vacíe dicha cola.
Arriba

Los métodos de esta clase influyen en el momento en que se realiza la recolección de elementos no utilizados de un objeto y en el momento en que se liberan los recursos asignados por un objeto. Las propiedades de esta clase proporcionan información sobre la cantidad de memoria total disponible en el sistema y la categoría de edad, o generación, de la memoria asignada a un objeto.

El recolector de elementos no utilizados realiza un seguimiento de los objetos asignados en la memoria administrada, y los reclama. De forma periódica, el recolector de elementos no utilizados reclama la memoria asignada a los objetos para los que no existen referencias válidas. La recolección de elementos no utilizados se produce de forma automática, cuando una solicitud de memoria no puede satisfacerse utilizando la memoria libre que queda disponible. Una aplicación también puede provocar la recolección de elementos no utilizados mediante el método Collect.

La recolección de elementos no utilizados consta de los siguientes pasos:

  1. El recolector de elementos no utilizados busca los objetos administrados a los que se hace referencia en el código administrado.

  2. El recolector de elementos no utilizados intenta finalizar los objetos a los que no se hace referencia.

  3. El recolector de elementos no utilizados libera los objetos a los que no se hace referencia y reclama la memoria utilizada por estos objetos.

Durante la recolección de elementos no utilizados, el recolector no liberará un objeto si encuentra una o varias referencias al mismo en el código administrado. El recolector de elementos no utilizados no reconoce, sin embargo, las referencias a objetos desde el código no administrado y puede liberar objetos que se estén utilizando exclusivamente en código no administrado, a menos que se le impida hacerlo de forma explícita. El método KeepAlive proporciona un mecanismo que impide que el recolector de elementos no utilizados recoja objetos que aún estén en uso en el código no administrado.

Salvo en el caso de las asignaciones de memoria administrada, las implementaciones del recolector de elementos no utilizados no incluyen información sobre los recursos mantenidos por un objeto, como los identificadores de archivo o las conexiones de base de datos. Cuando un tipo utiliza recursos no administrados que deben liberarse antes de que se reclamen las instancias del tipo, éste puede implementar un finalizador.

En la mayoría de los casos, los finalizadores se implementan reemplazando el método Object.Finalize; no obstante, los tipos escritos en C# o C++ implementan destructores, que los compiladores convierten en un reemplazo del método Object.Finalize. En la mayoría de los casos, si un objeto tiene un finalizador, el recolector de elementos no utilizados llama a dicho finalizador antes de liberar el objeto. Sin embargo, el recolector de elementos no utilizados no debe llamar a los finalizadores en todas las situaciones; por ejemplo, el método SuppressFinalize evita explícitamente que se llame a un finalizador. Además, el recolector de elementos no utilizados no tiene por qué utilizar un subproceso específico para finalizar objetos ni tampoco tiene por qué garantizar el orden en que se llama a los finalizadores para objetos que se hacen referencia mutuamente pero que sin embargo están disponibles para su recolección.

En los escenarios en los que los recursos deben liberarse en un momento determinado, las clases pueden implementar la interfaz IDisposable, que contiene el método IDisposable.Dispose que realiza tareas de administración y limpieza de recursos. Las clases que implementan Dispose deben especificar, como parte de su contrato de clase, si los consumidores de la clase van a llamar al método para limpiar el objeto y cuándo van a hacerlo. El recolector de elementos no utilizados no llama al método Dispose de forma predeterminada; sin embargo, las implementaciones del método Dispose pueden llamar a los métodos de la clase GC para personalizar el comportamiento de finalización del recolector.

Aunque no es obligatorio, se recomienda que los recolectores de elementos no utilizados admitan la caducidad de objetos mediante el uso de generaciones. Una generación es una unidad de medida de la edad relativa de los objetos en la memoria. El número de generación o la edad de un objeto indica la generación a la que pertenece. Los objetos creados más recientemente forman parte de las últimas generaciones y tienen números de generación más bajos que los objetos creados en fases anteriores del período de duración de la aplicación. Los objetos de la generación más reciente pertenecen a la generación cero.

Notas para los implementadores

Esta implementación del recolector de elementos no utilizados admite tres generaciones de objetos.

MaxGeneration se utiliza para determinar el número de generación máximo que va a admitir el sistema. La edad de los objetos permite que las aplicaciones dirijan la recolección de elementos no utilizados a un conjunto específico de generaciones en lugar de hacer que el recolector de elementos no utilizados evalúe todas las generaciones.

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 usados e imprimirla en la consola. Se recogen los objetos no usados y, a continuación, 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();
            }
        }
    }
}


.NET Framework

Compatible con: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Compatible con:

Windows 7, Windows Vista SP1 o posterior, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (no se admite Server Core), Windows Server 2008 R2 (se admite Server Core con SP1 o posterior), Windows Server 2003 SP2

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft