Usuário com melhor resposta
É necessário dar dispose() em objeto após setá-lo como NULL ?

Pergunta
-
Olaa,
Digamos que eu tenha um objeto que represente uma Conexão com um banco, ou uma Transação ou Qualquer outro objeto que foi dado NEW, se logo após o uso do mesmo eu setá-lo como NULL, é necessário dar Dispose() no mesmo. Se sim, porque ? se não, porque ?
Desde Já, Agradeço.
Atenciosamente.
- Editado _dev domingo, 26 de agosto de 2012 23:44
Respostas
-
Olá Rodrigo,
O ideal é utilizar o Dispose quando seu objeto consome algum recurso que o Garbage Collector pode não dar conta de livrar da memória, como por exemplo algum conteúdo não gerenciado (esse é o caso dos objetos de conexão com o banco de dados e buffer de arquivo, por exemplo). Caso vc atribua NULL para um objeto que é um IDisposable pode não ser suficiente para liberar todos os recursos da memória, pois como disse, pode ter algum conteúdo (algo não gerenciado) atrelado a execução deste objeto.
Depois que vc atribuir o NULL para uma instância de objeto, não irá conseguir executar o Dispose no mesmo, pois agora ele é nulo.
E sim, mesmo setando o valor NULL, pode ser que algum conteúdo não gerenciado fique em memória. Então, sempre que possível, execute o Dispose dos objetos que implementam IDisposable.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
Microsoft MVP - Data Platform Development
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil- Marcado como Resposta _dev terça-feira, 28 de agosto de 2012 02:28
-
Fala Rodrigo,
É altamente recomendavel utilizar o Dispose, porque se você setar como null, você está tirando o objeto da memoria, porém, alguns recursos continuam ativos.
Alguns exemplos, são: Abrir a conexão e não dar o dispose apenas setar como nulo, a conexão continua ativa. Abrir um arquivo e seta-lo como nulo, ele continua travado para a sua aplicação.
- Marcado como Resposta _dev terça-feira, 28 de agosto de 2012 02:28
Todas as Respostas
-
Olá.
É altamente recomendado a utilização de dispose para liberar os recursos que o objeto está consumindo.
Leia mais em:
http://www.devmedia.com.br/dicas-net-dispose-ou-nao-dispose/2586
e nas referências oficiais:
http://msdn.microsoft.com/pt-br/library/system.idisposable.dispose.aspx
Att.
Artur Barth
- Sugerido como Resposta Artur Barth segunda-feira, 27 de agosto de 2012 01:51
- Não Sugerido como Resposta _dev terça-feira, 28 de agosto de 2012 00:04
-
Olá Rodrigo,
É recomendado que vc use o Dispose() ou o Using.
Mas detalhe, o NULL se feito o Dispose não é obrigatório.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
Microsoft MVP - Data Platform Development
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
Depende.. o dispose libera de memória via GC e fecha qualquer conexão.
NULL anula o valor no endereço de memória do objeto.
Depende o que você quer fazer :)
Eu daria um Dispose(); de uma vez.
Lembre-se que o dispose consome memória para liberar recursos :D
-
Gostaria de Agradecer a todos pela atenção,
Mas ainda possuo uma última dúvida:
1) Mesmo sabendo que o NULL anula o valor no endereço de memória do objeto, esse objeto ainda consome recursos a ponto de que seja necessário realizar o Dispose() ?
Novamente Obrigado.
- Editado _dev terça-feira, 28 de agosto de 2012 00:01
-
Olá Rodrigo,
O ideal é utilizar o Dispose quando seu objeto consome algum recurso que o Garbage Collector pode não dar conta de livrar da memória, como por exemplo algum conteúdo não gerenciado (esse é o caso dos objetos de conexão com o banco de dados e buffer de arquivo, por exemplo). Caso vc atribua NULL para um objeto que é um IDisposable pode não ser suficiente para liberar todos os recursos da memória, pois como disse, pode ter algum conteúdo (algo não gerenciado) atrelado a execução deste objeto.
Depois que vc atribuir o NULL para uma instância de objeto, não irá conseguir executar o Dispose no mesmo, pois agora ele é nulo.
E sim, mesmo setando o valor NULL, pode ser que algum conteúdo não gerenciado fique em memória. Então, sempre que possível, execute o Dispose dos objetos que implementam IDisposable.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
Microsoft MVP - Data Platform Development
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil- Marcado como Resposta _dev terça-feira, 28 de agosto de 2012 02:28
-
Fala Rodrigo,
É altamente recomendavel utilizar o Dispose, porque se você setar como null, você está tirando o objeto da memoria, porém, alguns recursos continuam ativos.
Alguns exemplos, são: Abrir a conexão e não dar o dispose apenas setar como nulo, a conexão continua ativa. Abrir um arquivo e seta-lo como nulo, ele continua travado para a sua aplicação.
- Marcado como Resposta _dev terça-feira, 28 de agosto de 2012 02:28
-