Bewerken

Share via


GC.RemoveMemoryPressure(Int64) Method

Definition

Informs the runtime that unmanaged memory has been released and no longer needs to be taken into account when scheduling garbage collection.

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)

Parameters

bytesAllocated
Int64

The amount of unmanaged memory that has been released.

Attributes

Exceptions

bytesAllocated is less than or equal to 0.

-or-

On a 32-bit computer, bytesAllocated is larger than Int32.MaxValue.

Remarks

In determining when to schedule garbage collection, the runtime takes into account how much managed memory is allocated. If a small managed object allocates a large amount of unmanaged memory, the runtime takes into account only the managed memory, and thus underestimates the urgency of scheduling garbage collection. The AddMemoryPressure method informs the runtime of this additional pressure on system memory, and the RemoveMemoryPressure method informs the runtime that the additional pressure has been released.

The AddMemoryPressure and RemoveMemoryPressure methods improve performance only for types that exclusively depend on finalizers to release the unmanaged resources. It's not necessary to use these methods in types that follow the dispose pattern, where finalizers are used to clean up unmanaged resources only in the event that a consumer of the type forgets to call Dispose. For more information on object finalization and the dispose pattern, see Cleaning Up Unmanaged Resources.

In the simplest usage pattern, a managed object allocates unmanaged memory in the constructor and releases it in the Finalize method. Call the AddMemoryPressure method after allocating the unmanaged memory, and call the RemoveMemoryPressure method after releasing it.

In more complicated scenarios, where the unmanaged memory allocation changes substantially during the lifetime of the managed object, you can call the AddMemoryPressure and RemoveMemoryPressure methods to communicate these incremental changes to the runtime.

Caution

You must ensure that you remove exactly the amount of pressure you add. Failing to do so can adversely affect the performance of the system in applications that run for long periods of time.

Applies to