Compartir a través de


GC.RemoveMemoryPressure(Int64) Método

Definición

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.

public:
 static void RemoveMemoryPressure(long bytesAllocated);
[System.Security.SecurityCritical]
public static void RemoveMemoryPressure(long bytesAllocated);
public static void RemoveMemoryPressure(long bytesAllocated);
[<System.Security.SecurityCritical>]
static member RemoveMemoryPressure : int64 -> unit
static member RemoveMemoryPressure : int64 -> unit
Public Shared Sub RemoveMemoryPressure (bytesAllocated As Long)

Parámetros

bytesAllocated
Int64

Cantidad de memoria no administrada que se ha liberado.

Atributos

Excepciones

bytesAllocated es menor o igual que 0.

O bien

En un equipo de 32 bits, bytesAllocated es mayor que Int32.MaxValue.

Comentarios

El patrón común para liberar recursos nativos es a través del finalizador de un tipo. Si un objeto administrado usa memoria nativa, puede liberar esa memoria nativa en su finalizador. El recolector de elementos no utilizados solo conoce la memoria administrada y programa las recopilaciones en función de este conocimiento. Imagine un escenario en el que un objeto administrado pequeño está asociado a una gran cantidad de uso de memoria nativa y este objeto administrado ahora reside en gen2. Es posible que un GC gen2 no suceda durante algún tiempo, lo que significa que la gran cantidad de memoria nativa no se liberará hasta que se produzca la próxima generación 2. El tiempo de ejecución proporciona los AddMemoryPressure métodos y RemoveMemoryPressure para ayudar con este escenario. El tiempo de ejecución mantiene un registro interno de la presión de memoria que estas API han agregado y quitado, y desencadena una GC gen2 si se considera productiva. Por lo tanto, esta no es una característica de la GC, sino algo que el entorno de ejecución proporciona para desencadenar GCs.

Los AddMemoryPressure métodos y RemoveMemoryPressure mejoran el rendimiento solo para los tipos que dependen exclusivamente de los finalizadores para liberar los recursos no administrados. No es necesario usar estos métodos en tipos que siguen el patrón dispose, donde los finalizadores se usan para limpiar los recursos no administrados solo en caso de que un consumidor del tipo olvide llamar Disposea . Para obtener más información sobre la finalización de objetos y el patrón dispose, vea Limpieza de recursos no administrados.

En el patrón de uso más sencillo, un objeto administrado asigna memoria no administrada en el constructor y lo libera en el Finalize método . Llame al AddMemoryPressure método después de asignar la memoria no administrada y llame al RemoveMemoryPressure método después de liberarlo.

En escenarios más complicados, donde la asignación de memoria no administrada cambia considerablemente durante la vigencia del objeto administrado, puede llamar a los AddMemoryPressure métodos y RemoveMemoryPressure para comunicar estos cambios incrementales al tiempo de ejecución.

Precaución

Debe asegurarse de quitar exactamente la cantidad de presión que agregue. Si no lo hace, puede afectar negativamente al rendimiento del sistema en las aplicaciones que se ejecutan durante largos períodos de tiempo.

Se aplica a