none
Dúvida sobre método Dispose em um objeto criado em C# RRS feed

  • 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.

    segunda-feira, 2 de maio de 2016 19:38

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 Jalber Romano terça-feira, 3 de maio de 2016 11:07
    segunda-feira, 2 de maio de 2016 21:02

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



    segunda-feira, 2 de maio de 2016 20:50
    Moderador
  • 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 Jalber Romano terça-feira, 3 de maio de 2016 11:07
    segunda-feira, 2 de maio de 2016 21:02
  • Obrigado Cesar e Welington pelas dicas... :)
    terça-feira, 3 de maio de 2016 11:06
  • Obrigado Welengton pela força...
    terça-feira, 3 de maio de 2016 11:07