在C#中,释放资源通常是通过实现
IDisposable
接口来完成的。这允许对象在不再使用时主动释放资源。以下是实现IDisposable
接口的基本模式:
public class ResourceHolder : IDisposable
{
private bool disposed = false; // 用于跟踪资源是否已经被释放
// 实现 IDisposable 接口
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this); // 防止垃圾回收器再次调用析构函数
}
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
// 释放托管资源
}
// 释放非托管资源
disposed = true;
}
}
~ResourceHolder()
{
Dispose(false);
}
}
使用时:
using (var resource = new ResourceHolder())
{
// 使用 resource
}
// resource.Dispose() 会在这里自动被调用,释放资源
这里的using
语句确保Dispose
方法在结束时被调用,从而释放资源。Dispose(bool disposing)
方法允许在被释放的时候区分是否是由垃圾回收器触发的还是通过Dispose
方法调用。如果是通过Dispose
调用,可以释放托管和非托管资源;如果是由垃圾回收器调用,则通常只释放非托管资源,因为托管资源将由垃圾回收器自动处理。