Junior — Middle
Já utilizaste recursos não gerenciados ao desenvolver em C#?
sobes.tech IA
Resposta da IA
Sim, em C# ao trabalhar com recursos não gerenciados, como descritores de ficheiros, ligações a bases de dados ou ponteiros de memória, é importante libertar esses recursos corretamente para evitar fugas de memória e outros problemas. Para isso, geralmente implementa-se a interface IDisposable e o método Dispose(), onde se libertam os recursos não gerenciados.
Exemplo:
class UnmanagedResourceHolder : IDisposable
{
private IntPtr unmanagedPointer; // recurso não gerenciado
private bool disposed = false;
public UnmanagedResourceHolder()
{
// alocação do recurso não gerenciado
unmanagedPointer = /* chamada à API */ IntPtr.Zero;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (unmanagedPointer != IntPtr.Zero)
{
// libertar o recurso não gerenciado
// por exemplo, chamada à API nativa
unmanagedPointer = IntPtr.Zero;
}
disposed = true;
}
}
~UnmanagedResourceHolder()
{
Dispose(false);
}
}
Desta forma, a libertação de recursos não gerenciados é controlada manualmente, o que previne fugas.