class FileDealer: IDisposable
{
//定义一个访问文件资源的Win32句柄
private IntPtr fileHandle;
//定义引用的托管资源
private ManagedRes managedRes;
//定义构造器,初始化托管资源和非托管资源
public FileDealer(IntPtr handle, ManagedRes res)
{
fileHandle = handle;
managedRes = res;
}
//实现终结器,定义Finalize
~FileDealer()
{
if (fileHandle != IntPtr.Zero)
{
Dispose(false);
}
}
//实现IDisposable接口
public void Dispose()
{
Dispose(true);
//阻止GC调用Finalize方法
GC.SuppressFinalize(this);
}
//实现一个处理资源清理的具体方法
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
//清理托管资源
managedRes.Dispose();
}
//执行资源清理,在此为关闭对象句柄
if (fileHandle != IntPtr.Zero)
{
CloseHandle(fileHandle);
fileHandle = IntPtr.Zero;
}
}
public void Close()
{
//在内部调用Dispose来实现
Dispose();
}
//实现对文件句柄的其他应用方法
public void Write() { }
public void Read() { }
//引入外部Win32API
[DllImport("Kernel32")] private extern static Boolean CloseHandle(IntPtr handle);
}最佳 .NET 资源清理策略
最新推荐文章于 2025-07-29 12:17:11 发布
本文深入探讨了C#中通过IDisposable接口管理资源的方法,包括如何利用构造器、终结器和Dispose方法来确保资源在使用完毕后被正确释放。详细解释了如何在使用Win32 API时进行资源管理,以避免内存泄漏和程序崩溃。通过实例演示了资源清理的最佳实践,对于提升应用性能和稳定性具有重要意义。

1万+

被折叠的 条评论
为什么被折叠?



