GC.RemoveMemoryPressure(Int64) Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Informa o runtime de que a memória não gerida foi libertada e já não precisa de ser tida em conta ao agendar a recolha do 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 gerida que foi libertada.
- Atributos
Exceções
bytesAllocated é menor ou igual a 0.
-ou-
Num computador de 32 bits, bytesAllocated é maior do que o Int32.MaxValue.
Observações
O padrão comum para libertar recursos nativos é através do finalizador de um tipo. Se um objeto gerido usar memória nativa, pode libertar essa memória nativa no seu finalizador. O coletor de lixo só conhece a memória gerida e agenda as recolhas com base nesse conhecimento. Imagine um cenário em que um pequeno objeto gerido está associado a uma grande quantidade de uso de memória nativa, e esse objeto gerido agora vive na geração 2. Um GC gen2 pode não acontecer durante algum tempo, o que significa que a grande quantidade de memória nativa só será libertada quando a próxima gen2 acontecer. O runtime fornece os AddMemoryPressure métodos RemoveMemoryPressure e métodos para ajudar neste cenário. O tempo de execução mantém um registo interno de quanta pressão de memória estas APIs adicionaram e removeram, e aciona um GC gen2 se considerado produtivo. Portanto, isto não é uma funcionalidade do GC, mas sim algo que o tempo de execução fornece para ativar os GCs.
Os AddMemoryPressure métodos and RemoveMemoryPressure melhoram o desempenho apenas para tipos que dependem exclusivamente de finalizadores para libertar os recursos não geridos. Não é necessário usar estes métodos em tipos que seguem o padrão descarte, onde os finalizadores são usados para limpar recursos não geridos apenas no caso de um consumidor desse tipo se esquecer de chamar Dispose. Para obter mais informações sobre a finalização de objetos e o padrão de descarte, consulte Limpando recursos não gerenciados.
No padrão de utilização mais simples, um objeto gerido aloca memória não gerida no construtor e liberta-a no Finalize método. Chame o AddMemoryPressure método depois de alocar a memória não gerida e chame o RemoveMemoryPressure método depois de a libertar.
Em cenários mais complexos, onde a alocação de memória não gerida muda substancialmente durante a vida útil do objeto gerido, pode chamar os AddMemoryPressure métodos e RemoveMemoryPressure para comunicar estas alterações incrementais ao tempo de execução.
Atenção
Deve garantir que remove exatamente a quantidade de pressão que adiciona. Não o fazer pode afetar negativamente o desempenho do sistema em aplicações que funcionam durante longos períodos.