Diferença entre dispose () e finalize () em C #
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.
- Gráfico de comparação
- Definição
- Principais diferenças
- Conclusão
Gráfico de comparação
Base para Comparação | dispor () | finalize () |
---|---|---|
Definiram | O método dispose () é definido na interface IDisposable interface. | O método finalize () id definido na classe java.lang.object. |
Sintaxe | public 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. |
Finalidade | O 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ção | O 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 acesso | O 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ção | O 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.
- O método dispose () é definido em uma interface IDisposable. Por outro lado, o método finalize () é definido na classe objeto.
- 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.
- 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.
- 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.
- 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.
- 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.