none
Dúvidas sobre Destrutores. RRS feed

  • Pergunta

  • Olaa,

               Levando -se em consideração o cenário abaixo:

    ProvedorDeDados{
    
    
    private NpgsqlConnection conexao = null;
    
    private NpgsqlTransaction transacao = null;
    
    
    public ProvedorDeDados(string stringDeConexao){
    
      this.conexao = new NpgsqlConnection(stringDeConexao);
      this.conexao.Open();
    
    }
    
    ~ ProvedorDeDados() {
    
          if (this.transacao != null){
                  
              // Correto o uso do Dispose() nessa situação ?  
              this.transacao.Dispose();
          }
              // Correto o uso do Dispose() nessa situação ?  
              this.conexao.Dispose();
       }
    
    }

    É uma má prática realizar o Dispose() conforme mostrado acima em um Destrutor ? Se sim, porque ? Se não, porque ?       

    Desde Já, Agradeço.

    Atenciosamente.

    terça-feira, 2 de outubro de 2012 01:03

Respostas

  • Isso mesmo Janderson, sempre que você está instanciando um objeto que vá utilizar memória e vai ser destruído ao fim do bloco de código, utilize o Using...

    using(SqlConnection objConn = new SqlConnection())
    {
      using(SqlCommand objCmd = new SqlCommand())
      {
        etc..
      } //objCmd será destruido da memória
    }// objConn será destruído da memória


    Se a resposta foi útil por favor qualifique. Italo Biguzi Duarte, Desenvolvedor ASP.NET C#, Italo.biguzzi@gmail.com

    • Marcado como Resposta _dev quinta-feira, 4 de outubro de 2012 02:33
    quarta-feira, 3 de outubro de 2012 22:57
  • Cara, nesse caso eu acho que não é, porque? pelo fato de que você o objeto não é liberado no mesmo momento em que você chama o dispose, nesse caso, o bacana seria usar alguma coisa desse tipo:

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
       connection.Open();
       
    }

    Assim que a execução sai fora do using a conexão é fechada, ao final do "using" o recurso é liberado.

    Sobre dispose:

    http://ericmilaneze.blogspot.com.br/2009/05/c-garbage-collection-e-destrutores.html


    Se a resposta foi útil por favor qualifique! Janderson Candido de Mattos - MCTS


    terça-feira, 2 de outubro de 2012 11:38

Todas as Respostas

  • Cara, nesse caso eu acho que não é, porque? pelo fato de que você o objeto não é liberado no mesmo momento em que você chama o dispose, nesse caso, o bacana seria usar alguma coisa desse tipo:

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
       connection.Open();
       
    }

    Assim que a execução sai fora do using a conexão é fechada, ao final do "using" o recurso é liberado.

    Sobre dispose:

    http://ericmilaneze.blogspot.com.br/2009/05/c-garbage-collection-e-destrutores.html


    Se a resposta foi útil por favor qualifique! Janderson Candido de Mattos - MCTS


    terça-feira, 2 de outubro de 2012 11:38
  • Isso mesmo Janderson, sempre que você está instanciando um objeto que vá utilizar memória e vai ser destruído ao fim do bloco de código, utilize o Using...

    using(SqlConnection objConn = new SqlConnection())
    {
      using(SqlCommand objCmd = new SqlCommand())
      {
        etc..
      } //objCmd será destruido da memória
    }// objConn será destruído da memória


    Se a resposta foi útil por favor qualifique. Italo Biguzi Duarte, Desenvolvedor ASP.NET C#, Italo.biguzzi@gmail.com

    • Marcado como Resposta _dev quinta-feira, 4 de outubro de 2012 02:33
    quarta-feira, 3 de outubro de 2012 22:57
  • Grato pela atenção de todos,

    Minha dúvida foi sanada.

    quinta-feira, 4 de outubro de 2012 02:33