Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Para a maioria dos objetos que seu aplicativo cria, você pode contar com o coletor de lixo .NET para lidar com o gerenciamento de memória. No entanto, ao criar objetos que incluem recursos não gerenciados, você deve liberar explicitamente esses recursos quando terminar de usá-los. Os tipos mais comuns de recursos não gerenciados são objetos que encapsulam recursos do sistema operacional, como arquivos, janelas, conexões de rede ou conexões de banco de dados. Embora o coletor de lixo seja capaz de acompanhar o tempo de vida de um objeto que encapsula um recurso não gerenciado, ele não sabe como liberar e limpar o recurso não gerenciado.
Se seus tipos usarem recursos não gerenciados, você deverá fazer o seguinte:
Implemente o padrão de descarte. Isso exige que você forneça uma IDisposable.Dispose implementação para habilitar a liberação determinística de recursos não gerenciados. Um consumidor do seu tipo chama Dispose quando o objeto (e os recursos que ele usa) não são mais necessários. O Dispose método libera imediatamente os recursos não gerenciados.
No caso de um consumidor do seu tipo esquecer de chamar Dispose, forneça uma maneira para que seus recursos não gerenciados sejam liberados. Há duas maneiras de fazer isso:
Usar um identificador seguro para encapsular o recurso não gerenciado. Essa é a técnica recomendada. Os identificadores seguros são derivados da classe abstrata System.Runtime.InteropServices.SafeHandle e incluem um método Finalize robusto. Ao usar um identificador seguro, basta implementar a interface IDisposable e chamar o método Dispose do seu identificador seguro na implementação IDisposable.Dispose. O finalizador do identificador seguro é chamado automaticamente pelo coletor de lixo quando seu método Dispose não é chamado.
— ou—
Defina um finalizador. A finalização habilita a liberação não determinística de recursos não gerenciados quando o consumidor de um tipo não chama IDisposable.Dispose para fazer o descarte de forma determinística.
Aviso
A finalização de objetos pode ser uma operação complexa e propensa a erros. Recomendamos que você utilize um handle seguro em vez de fornecer seu próprio finalizador.
Os consumidores do seu tipo podem então chamar sua IDisposable.Dispose implementação diretamente para liberar a memória usada por recursos não gerenciados. Quando você implementa corretamente um método Dispose, o método Finalize do seu identificador seguro ou sua própria substituição do método Object.Finalize torna-se uma proteção para limpar recursos para o caso do método Dispose não ser chamado.
Nesta seção
Implementar um método Dispose descreve como implementar o padrão de descarte para liberar recursos não gerenciados.
Usar objetos que implementam IDisposable descreve como os consumidores de um tipo garantem que a implementação Dispose seja chamada. É altamente recomendável usar a instrução C# using (ou Visual Basic Using) para fazer isso.
Referência
| Tipo/Membro | Descrição |
|---|---|
| System.IDisposable | Define o Dispose método para liberar recursos não gerenciados. |
| Object.Finalize | Fornece a finalização do objeto se os recursos não gerenciados não forem liberados pelo Dispose método. |
| GC.SuppressFinalize | Suprime a finalização. Esse método costuma ser chamado pelo método Dispose para impedir a execução de um finalizador. |