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 é considerado uma forte referência ao objeto.

Uma referência fraca permite que o coletor de lixo para coletar o objeto e, ao mesmo tempo, permitir o aplicativo para acessar o objeto.Uma referência fraca é válida apenas durante o período indeterminado até que o objeto é coletado quando não existe nenhuma referência forte.Quando você usa uma referência fraca, o aplicativo ainda pode obter uma referência forte para o objeto, que impede que estão sendo coletados.No entanto, sempre há o risco de que o coletor de lixo terá ao objeto primeiro antes de uma referência forte é restabelecida.

Referências fracas são úteis para objetos que usam muita memória, mas podem ser com com facilidade recriados se eles são recuperados pela lixo coleção.

Suponha que um modo de exibição de árvore em um aplicativo Windows Forms 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 algo no aplicativo.

Quando o usuário alternar para outra parte do aplicativo ausente, 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 for bem-sucedido, evita reconstruindo a árvore.

Para estabelecer uma referência fraca com um objeto, você cria um WeakReference usando a instância do objeto ser rastreadas. Em seguida, você define o Target propriedade para esse objeto e defina o objeto para null. Para obter um exemplo de código, consulte WeakReference na biblioteca de classes.

Curto e longo fraca referências

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

  • Short

    Se torna o destino de uma referência fraca curtonull Quando o objeto é recuperado pelo lixo coleção. A referência fraca é, um objeto gerenciado em si e está sujeitas a coleta de lixo como qualquer Outros objeto gerenciado.Uma referência fraca curta é o construtor padrão de WeakReference.

  • Long

    Uma referência fraca longo é mantida depois 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 longa, especifique true no WeakReference construtor.

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

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

Diretrizes para usar referências fracos

Use referências fracas longo somente quando necessário, sistema autônomo o estado do objeto é imprevisível após a finalização.

Evite usar referências fracas a objetos pequenos porque o ponteiro se pode ser tão grande ou maior.

Evite usar referências fracas sistema autônomo uma solução automático para problemas de gerenciamento de memória.Em vez disso, desenvolva uma política efetiva de cache para manipular objetos de seu aplicativo.

Consulte também

Tarefas

Exemplo de tecnologia de coleta de Lixo

Outros recursos

Coleta de Lixo