Usuário com melhor resposta
Dúvida sobre método Dispose em um objeto criado em C#

Pergunta
-
Olá companheiros!
Tenho um dúvida sobre quando dar Dispose em alguns objetos criados em um form C#. Quando um form é criado, eu instancio um DataTable... Quando eu encerro o Form, este objeto é removido automaticamente pelo coletor de lixo do .NET ou é necessário eu dar um dispose nele antes? Pergunto isso, pois sempre tenho essas duvidas sobre quando dar Dispose nos objetos. Tenho muito receio de deixá-los na memória e consumir recursos do PC desnecessariamente.
Respostas
-
O dispose geralmente é usado para objetos que acessam recursos fora do .Net Framework, por exemplo um banco de dados, escrever um arquivo e etc., Recursos não gerenciados devem sempre chamar o Dispose.
Já no seu caso, no stackoverflow eles comentam que não é necessário fazer esta chamada para DataTable e DataSet já que o metodo está lá por causa da herança "MarshalByValueComponent". Mas em regra geral, se houver o metodo dispose e tiver dúvida se o objeto não é gerenciado, usa o metodo já que o custo é menor que manter o objeto preso na memória!.
http://stackoverflow.com/questions/913228/should-i-dispose-dataset-and-datatable
http://stackoverflow.com/questions/18869079/datatable-dispose-will-make-it-remove-from-memory
- Marcado como Resposta JR-Master terça-feira, 3 de maio de 2016 11:07
Todas as Respostas
-
Boa tarde,
O coletor de lixo vai ficar encarregado de limpar pra você. Mas você não sabe a hora que ele vai limpar, (2 minutos, 10 horas, 1 dia). o padrão disposable é para pode fazer a limpeza imediato. Por exemplo abre um arquivo em disco ler, e você chama o dispose e libera o arquivo, mas sua classe vai ser o coletor quem vai limpar, e uso de memória não gerenciada(abertura do arquivo) você limpou chamando dispose. Como o coletor de lixo só sabe limpar memória gerenciada, memória não gerenciada terás que limpar você mesmo, é ai que o disposable é muito utilizado.Ele ja vem implementados em classes de abrir arquivos, conexão de banco de dados.
https://msdn.microsoft.com/pt-br/library/fs2xkftw%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
- Editado welington jrModerator segunda-feira, 2 de maio de 2016 21:05
-
O dispose geralmente é usado para objetos que acessam recursos fora do .Net Framework, por exemplo um banco de dados, escrever um arquivo e etc., Recursos não gerenciados devem sempre chamar o Dispose.
Já no seu caso, no stackoverflow eles comentam que não é necessário fazer esta chamada para DataTable e DataSet já que o metodo está lá por causa da herança "MarshalByValueComponent". Mas em regra geral, se houver o metodo dispose e tiver dúvida se o objeto não é gerenciado, usa o metodo já que o custo é menor que manter o objeto preso na memória!.
http://stackoverflow.com/questions/913228/should-i-dispose-dataset-and-datatable
http://stackoverflow.com/questions/18869079/datatable-dispose-will-make-it-remove-from-memory
- Marcado como Resposta JR-Master terça-feira, 3 de maio de 2016 11:07
-
-