Gráfico de comparação
Base para Comparação | dispor () | finalizar () |
---|---|---|
Definiram | O método dispose () é definido na interface IDisposable da interface. | O método finalize () id definido na classe java.lang.object. |
Sintaxe | public void Dispose () { // Descarte o código aqui } | void protegido finalize () { // código de finalização aqui } |
Invocado | O método dispose () é invocado pelo usuário. | O método finalize () é invocado pelo coletor de lixo. |
Propósito | O 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çã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 finalizar é mais lento em comparação ao descarte |
atuação | O 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 ()
- O método dispose () é definido em uma interface IDisposable . Por outro lado, o método finalize () é definido no objeto de classe.
- 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.
- 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.
- 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.
- 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.
- 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.