GC.RemoveMemoryPressure(Int64) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Informa ao runtime que a memória não gerenciada foi liberada e não precisa mais ser levada em conta ao agendar a coleta de lixo.
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
A quantidade de memória não gerenciada que foi liberada.
- Atributos
Exceções
bytesAllocated é menor ou igual a 0.
- ou -
Em um computador de 32 bits, bytesAllocated é maior que Int32.MaxValue.
Comentários
O padrão comum para liberar recursos nativos é por meio do finalizador de um tipo. Se um objeto gerenciado usa memória nativa, ele pode liberar essa memória nativa em seu finalizador. O coletor de lixo só sabe sobre a memória gerenciada e agenda coleções com base nesse conhecimento. Imagine um cenário em que um pequeno objeto gerenciado está associado a uma grande quantidade de uso de memória nativa e esse objeto gerenciado agora reside na geração 2. Um GC gen2 pode não acontecer por algum tempo, o que significa que a grande quantidade de memória nativa não será liberada até que a próxima geração2 aconteça. O runtime fornece os métodos e RemoveMemoryPressure os AddMemoryPressure métodos para ajudar nesse cenário. O runtime mantém um registro interno de quanta pressão de memória essas APIs adicionaram e removeram e dispara um GC gen2, se considerado produtivo. Portanto, esse não é um recurso do GC, mas sim algo que o runtime fornece para disparar GCs.
Os métodos e os AddMemoryPressureRemoveMemoryPressure métodos melhoram o desempenho somente para tipos que dependem exclusivamente de finalizadores para liberar os recursos não gerenciados. Não é necessário usar esses métodos em tipos que seguem o padrão de descarte, em que os finalizadores são usados para limpar recursos não gerenciados apenas no caso de um consumidor do tipo esquecer de chamar Dispose. Para obter mais informações sobre a finalização do objeto e o padrão de descarte, consulte Limpeza de recursos não gerenciados.
No padrão de uso mais simples, um objeto gerenciado aloca memória não gerenciada no construtor e a libera no Finalize método. Chame o AddMemoryPressure método depois de alocar a memória não gerenciada e chame o RemoveMemoryPressure método depois de liberá-lo.
Em cenários mais complicados, em que a alocação de memória não gerenciada muda substancialmente durante o tempo de vida do objeto gerenciado, você pode chamar e AddMemoryPressureRemoveMemoryPressure métodos para comunicar essas alterações incrementais ao runtime.
Cuidado
Você deve garantir que remova exatamente a quantidade de pressão que você adiciona. Não fazer isso pode afetar negativamente o desempenho do sistema em aplicativos que são executados por longos períodos de tempo.