GC.AddMemoryPressure(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 o runtime de uma grande alocação de memória não gerenciada que deve ser levada em conta ao agendar a coleta de lixo.
public:
static void AddMemoryPressure(long bytesAllocated);
[System.Security.SecurityCritical]
public static void AddMemoryPressure(long bytesAllocated);
public static void AddMemoryPressure(long bytesAllocated);
[<System.Security.SecurityCritical>]
static member AddMemoryPressure : int64 -> unit
static member AddMemoryPressure : int64 -> unit
Public Shared Sub AddMemoryPressure (bytesAllocated As Long)
Parâmetros
- bytesAllocated
- Int64
A quantidade incremental de memória não gerenciada que foi alocada.
- 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.