Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês

Referências fracas

 

O coletor de lixo não pode coletar um objeto em uso por um aplicativo enquanto o código do aplicativo pode acessar esse objeto. O aplicativo tem uma referência forte para o objeto.

Uma referência fraca permite que o coletor de lixo colete o objeto enquanto ainda permite que o aplicativo o acesse. Uma referência fraca é válida somente durante o período indeterminado até que o objeto seja coletado quando não há nenhuma referência forte. Quando você usa uma referência fraca, o aplicativo ainda pode obter uma referência forte para o objeto, o que impede que ele seja coletado. No entanto, sempre há o risco de o coletor de lixo obter o objeto primeiro antes de uma referência forte ser restabelecida.

As referências fracas são úteis para objetos que usam muita memória, mas podem ser facilmente recriados se forem recuperados pela coleta de lixo.

Suponha que uma exibição de árvore em um aplicativo de formulários do Windows exibe uma escolha hierárquica complexa de opções para o usuário. Se os dados subjacentes forem grandes, manter a árvore na memória é ineficiente quando o usuário está envolvido com outra coisa no aplicativo.

Quando o usuário alterna imediatamente para outra parte do aplicativo, você pode usar o WeakReference classe para criar uma referência fraca para a árvore e destruir todas as referências fortes. Quando o usuário alterna de volta para a árvore, o aplicativo tenta obter uma referência forte para a árvore e, se tiver êxito, evita a reconstrução da árvore.

Para estabelecer uma referência fraca com um objeto, você cria um WeakReference usando a instância do objeto a ser rastreada. Você deve definir o Target propriedade para esse objeto e o conjunto original de referência para o objeto a ser null. Para obter um exemplo de código, consulte WeakReference na biblioteca de classes.

Você pode criar uma referência fraca curta ou uma referência fraca longa:

  • Abreviado

    O destino de uma referência fraca curta se torna null quando o objeto é recuperado pela coleta de lixo. A referência fraca é um objeto gerenciado e está sujeita à coleta de lixo assim como qualquer outro objeto gerenciado. Uma referência fraca curta é o construtor padrão para WeakReference.

  • Long

    Uma referência fraca longa é mantida após o objeto Finalize método foi chamado. Isso permite que o objeto seja recriado, mas o estado do objeto permanece imprevisível. Para usar uma referência de tempo, especifique true no WeakReference construtor.

    Se o tipo de objeto não tem um Finalize aplica-se do método, a funcionalidade de referência fraca curto e a referência fraca é válida somente até que o destino é coletado, que podem ocorrer a qualquer momento após o finalizador é executado.

Para estabelecer uma referência forte e usar o objeto novamente, converter o Target propriedade de um WeakReference para o tipo do objeto. Se o Target propriedade retorna null, o objeto foi coletado; caso contrário, você pode continuar a usar o objeto porque o aplicativo foi recuperada de uma referência forte a ele.

Use referências fracas longas somente quando necessário, uma vez que o estado do objeto é imprevisível após a finalização.

Evite usar referências fracas para objetos pequenos, pois o ponteiro em si pode ser tão grande quanto ou maior.

Evite usar referências fracas como uma solução automática para problemas de gerenciamento de memória. Em vez disso, desenvolva uma política de cache efetiva para lidar com os objetos do seu aplicativo.

Mostrar: