Índice:
Definição - O que significa Dispose?
No contexto de C #, disposição é um método de objeto chamado para executar o código necessário para limpeza de memória e liberar e redefinir recursos não gerenciados, como identificadores de arquivo e conexões com o banco de dados. Dispose melhora o desempenho e otimiza a memória, liberando objetos incontroláveis e recursos escassos, como identificadores de interface de dispositivo gráfico (GDI) usados em aplicativos com espaço restrito no Windows.
O método Dispose, fornecido pela interface IDisposable, implementa chamadas Dispose. O padrão Dispose foi desenvolvido para limpeza oportuna e previsível, prevenção de vazamentos temporários de memória e descarte de recursos.
Techopedia explica Dispose
A estrutura .NET facilita a coleta de lixo (GC), gerencia a memória e os recursos dos objetos e recupera referências inválidas da memória de objetos invocando Finalize - um método não determinístico. O método Dispose controla a vida útil das instâncias de memória de objeto e fornece controle explícito de limpeza de memória, versus a limpeza implícita de memória de Finalize. Dispose pode ser chamado mesmo quando existem outras instâncias de objetos de memória, enquanto Finalize só pode ser chamado após a destruição do último objeto de memória.
As regras do método Dispose são as seguintes:
- Usado para recursos não gerenciados que exigem liberação imediata após o uso.
- Se Dispose não for chamado, o método Finalize deve ser implementado.
- Depois de chamar o método Dispose, o método GC.SuppressFinalize deve ser chamado para evitar o método Finalize e evitar o GC desnecessário.
- As exceções devem ser tratadas com cuidado se o método Dispose for invocado mais de uma vez. Se os recursos forem descartados, qualquer método de instância poderá lançar o ObjectDisposedException.
- Um objeto com um método Dispose chamado anteriormente não pode ser reutilizado.
- Dispose é recomendado apenas para o gerenciamento de objetos de recursos nativos e objetos COM (Component Object Model) expostos ao .NET Framework.
- Dispose não pode ser chamado simultaneamente de vários threads, devido a resultados imprevisíveis.
- Os tipos de valor não devem ser criados como tipos descartáveis ou com membros de recursos não gerenciados.
- Ao usar recursos não gerenciados, é considerado uma prática recomendada aplicar a instrução Using do código-fonte, que invoca automaticamente o método Dispose do objeto depois de concluir o código do objeto.