Diferença entre dispose () e finalize () em C #

Autor: Laura McKinney
Data De Criação: 2 Abril 2021
Data De Atualização: 13 Poderia 2024
Anonim
Diferença entre dispose () e finalize () em C # - Tecnologia
Diferença entre dispose () e finalize () em C # - Tecnologia

Contente


Os métodos dispose () e finalize () são os métodos de C # que são chamados para liberar os recursos não gerenciados mantidos por um objeto. O método dispose () é definido dentro da interface IDisposable, enquanto o método finalize () é definido dentro do objeto de classe. A principal diferença entre dispose () e finalize () é que o método dispor() deve ser explicitamente invocado pelo usuário, enquanto que o método finalizar() é invocado pelo coletor de lixo, pouco antes do objeto ser destruído. Vamos estudar algumas outras diferenças entre eles com a ajuda de um gráfico de comparação mostrado abaixo.

  1. Gráfico de comparação
  2. Definição
  3. Principais diferenças
  4. Conclusão

Gráfico de comparação

Base para Comparaçãodispor ()finalize ()
DefiniramO método dispose () é definido na interface IDisposable interface.O método finalize () id definido na classe java.lang.object.
Sintaxepublic void Dispose () {
// Descarte o código aqui
}
nulo protegido finalize () {
// código de finalização aqui
}
Invocado O método dispose () é invocado pelo usuário.O método finalize () é chamado pelo coletor de lixo.
FinalidadeO método dispose () é usado para liberar recursos não gerenciados sempre que é chamado.O método finalize () é usado para liberar recursos não gerenciados antes que o objeto seja destruído.
ImplementaçãoO método dispose () deve ser implementado sempre que houver um método close ().O método finalize () deve ser implementado para recursos não gerenciados.
Especificador de acessoO método dispose () é declarado como público.O método finalize () é declarado como privado.
Açao O método dispose () é mais rápido e instantaneamente descarta um objeto.O método finalize é mais lento em comparação com o descarte
atuaçãoO método disposes () executa a ação instantânea, portanto, não afeta o desempenho dos sites. O método finalize () mais lento afeta o desempenho dos sites.


Definição de descarte ()

O método dispose () libera os recursos não gerenciados mantidos por um objeto da classe. Os recursos não gerenciados são arquivos, conexões de dados, etc. O método dispose () é declarado na interface IDisposeable e é implementado pela classe implementando a interface IDisposable. Este método não é chamado automaticamente. O programador deve implementá-lo manualmente quando você estiver criando uma classe personalizada que será usada por outras pessoas. O método possui a seguinte sintaxe:

public void dispose () {// Descarte o código aqui}

Na sintaxe acima, você pode observar que o método é declarado como público. Isso ocorre porque esse método é definido na interface IDisposable e deve ser implementado pela classe que implementa essa interface. Portanto, para fornecer acessibilidade à classe de implementação, o método é declarado como público.


Este método é chamado manualmente pelo código de um programa conforme é implementado para chamar. O desempenho dos métodos é rápido e libera instantaneamente os recursos mantidos pelo objeto de uma classe.

Definição de finalize ()

O método finalize () é definido no objeto classe. É usado para atividades de limpeza. Esse método é chamado pelo coletor de lixo quando a referência de um objeto não é usada por um longo tempo. O coletor de lixo libera os recursos gerenciados automaticamente, mas se você deseja liberar os recursos não gerenciados, como manipulação de arquivos, conexão de dados, etc., o método finalize deve ser implementado manualmente. O coletor de lixo chama o método finalize () antes de destruir o objeto completamente.

A sintaxe do método finalize ():

protected void finalize () {// código de finalização aqui}

Na sintaxe acima, o método finalize () é declarado como protegido. A razão por trás disso é que o método finalize () não deve ser acessível de fora da classe e deve ser acessível apenas ao coletor de lixo.

O método finalize () afeta o custo do desempenho, pois não libera a memória instantaneamente. Em C #, o método finalize é chamado automaticamente com destruidores.

  1. O método dispose () é definido em uma interface IDisposable. Por outro lado, o método finalize () é definido na classe objeto.
  2. O método dispose () deve ser chamado manualmente dentro do código por um programador, enquanto o método finalize é automaticamente chamado pelo coletor de lixo antes que ele destrua o objeto.
  3. O método descarte pode ser chamado a qualquer momento, enquanto o método finalize é invocado pelo coletor de lixo quando ele descobre que esse objeto não foi referenciado por um longo tempo.
  4. O método dispose () é implementado em uma classe após a implementação da interface IDisposable. O método finalize () deve ser implementado apenas para recursos não gerenciados porque os recursos gerenciados são liberados automaticamente pelo coletor de lixo.
  5. O especificador de acesso do método dispose () é público, pois é definido na interface IDisposable e seria implementado pela classe que implementa essa interface; portanto, deve ser público. Por outro lado, o método finalize () protegeu o especificador de acesso, de forma que não deve ser acessível a nenhum membro fora da classe.
  6. O método dispose () é rápido e libera o objeto instantaneamente, portanto, não afeta o custo de desempenho. O método finalize () é mais lento e não libera os recursos mantidos pelo objeto instantaneamente.

Conclusão:

Sugere-se usar o método dispose () sobre o método finalize (), pois é mais rápido que finalize. Além disso, pode ser chamado a qualquer momento, quando necessário.