Definição – o que significa Dispose?
No contexto do C #, dispose é um método de objeto chamado para executar o código necessário para a limpeza e liberação da memória e redefinir recursos não gerenciados, como identificadores de arquivo e conexões de banco de dados. Dispose melhora o desempenho e otimiza a memória ao liberar objetos não gerenciáveis e recursos escassos, como identificadores de interface de dispositivo gráfico (GDI) usados em aplicativos com espaço restrito do Windows.
O método Dispose, fornecido pela interface IDisposable, implementa chamadas Dispose. O padrão Dispose é projetado para limpeza oportuna e previsível, prevenção de vazamentos de memória temporários e descarte de recursos.
Definirtec explica Dispose
A estrutura .NET facilita a coleta de lixo (GC), gerencia a memória e os recursos do objeto e recupera referências de memória do objeto inválidas invocando Finalize – um método não determinístico. O método Dispose controla o tempo de vida das instâncias de memória do objeto e fornece controle de limpeza de memória explícita, em comparação com a limpeza de memória implícita de Finalize. Dispose pode ser invocado mesmo quando existem outras instâncias de objeto de memória, enquanto Finalize só pode ser invocado depois que o último objeto de memória é destruído.
As regras do método de descarte são as seguintes:
- Usado para recursos não gerenciados que requerem 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 GC desnecessário.
- As exceções devem ser tratadas com cuidado se o método Dispose for chamado mais de uma vez. Se os recursos forem descartados, qualquer método de instância pode lançar a ObjectDisposedException.
- Um objeto com um método anteriormente denominado Dispose não pode ser reutilizado.
- Dispose é recomendado apenas para o gerenciamento de objetos de recursos nativos e objetos Component Object Model (COM) expostos ao .NET Framework.
- Dispose não pode ser invocado simultaneamente a partir 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, é considerada prática recomendada aplicar a instrução Using do código-fonte, que invoca automaticamente o método Dispose do objeto após completar o código do objeto.
Esta definição foi escrita no contexto de C #