Recomendado, 2024

Escolha Do Editor

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

Os métodos dispose () e finalize () são os métodos do C # que são invocados 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 da classe. A principal diferença entre dispose () e finalize () é que o método dispose () deve ser invocado explicitamente pelo usuário, enquanto o método finalize () é 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.

Gráfico de comparação

Base para Comparaçãodispor ()finalizar ()
DefiniramO método dispose () é definido na interface IDisposable da interface.O método finalize () id definido na classe java.lang.object.
Sintaxepublic void Dispose () {
// Descarte o código aqui
}
void protegido finalize () {
// código de finalização aqui
}
InvocadoO método dispose () é invocado pelo usuário.O método finalize () é invocado pelo coletor de lixo.
PropósitoO método dispose () é usado para liberar recursos não gerenciados sempre que ele é invocado.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çaoO método dispose () é mais rápido e instantaneamente descarta um objeto.O método finalizar é mais lento em comparação ao descarte
atuaçãoO método disposes () realiza a ação instantânea, portanto, não afeta o desempenho dos sites.O método finalize () sendo mais lento afeta o desempenho dos sites.

Definição de dispor ()

O método dispose () libera os recursos não gerenciados que são 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 tem que implementá-lo manualmente quando você está criando uma classe personalizada que será usada por outras pessoas. O método tem a seguinte sintaxe:

 public void dispose () {// Dispose code here} 

Na sintaxe acima, você pode observar que o método é declarado como público. É 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 é invocado manualmente pelo código de um programa conforme é implementado para invocar. O desempenho dos métodos é rápido e libera instantaneamente os recursos mantidos pelo objeto de uma classe.

Definição de finalizar ()

O método finalize () é definido na classe de objeto . É 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ê quiser liberar os recursos não gerenciados, como manipulador de arquivo, conexão de dados, etc., o método finalize deve ser implementado manualmente. O coletor de lixo invoca o método finalize () antes que ele destrua 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.

Principais diferenças entre dispose () e finalize ()

  1. O método dispose () é definido em uma interface IDisposable . Por outro lado, o método finalize () é definido no objeto de classe.
  2. O método dispose () deve ser invocado manualmente dentro do código por um programador, enquanto o método finalize é invocado automaticamente pelo coletor de lixo antes que ele destrua o objeto.
  3. O método dispor pode ser invocado a qualquer momento, enquanto o método finalize é invocado pelo coletor de lixo quando 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, pois os recursos gerenciados são automaticamente liberados 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ública. Por outro lado, o método finalize () protegeu o especificador de acesso para que não seja 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 finalizar. Além disso, poderia ser chamado a qualquer momento, quando necessário.

Top