Esta linha de código aloca um espaço de memória no heap para o objeto foo
var foo =new object();
Essa linha de código vai liberar isso?
foo=null;
Ou é apenas eliminar a referência a um local de memória no heap.
Respostas:
3 para resposta № 1Apenas remove a referência. O objeto em si é lixo coletado quando o tempo de execução considera adequado e é, na verdade, independente de a referência ser ou não apagada.
2 para resposta № 2
Em C #, todos os objetos são coletados como lixo, você não pode "deletar" eles.
Quando a última referência a um determinado objeto cai fora do escopo, o objeto é passível de coleção. Você pode certamente anular quantas referências você puder encontrar, mas o objeto permanecerá vivo enquanto qualquer referência ainda sustenta que objeto.
Então, definindo foo=null;
basta remover a referência.
A coleta de lixo consiste nas seguintes etapas:
- O coletor de lixo procura objetos gerenciados que são referenciado no código gerenciado.
- O coletor de lixo tenta finalizar objetos que não são referenciado.
- O coletor de lixo libera objetos que não são referenciados e recupera sua memória.
É importante entender como os coletores de lixo funcionam Classe GC
Exemplo
// Set a break-point here to see that foo = null.
// However, the compiler considers it "unassigned."
// and generates a compiler error if you try to
// use the variable.
object foo;
// Now foo has a value.
foo = new object();
// Set foo to null again. The object it referenced
// is no longer accessible and can now be garbage-collected.
foo = null;