我想了解如何使用非托管资源,以及何时需要SafeHandle类。当你可以说:“哦,这里我需要SafeHandle类!”
如有文章、例子、解释的链接,我将不胜感激。
发布于 2022-02-10 15:56:51
我认为MSDN的定义非常清楚:
SafeHandle类提供句柄资源的关键终结,防止垃圾回收过早地回收句柄,并防止句柄被回收以引用非预期的非托管对象。在.NET框架2.0版本之前,所有操作系统句柄只能封装在IntPtr托管包装器对象中。 SafeHandle类包含一个终结器,它确保句柄关闭并保证运行,即使在意外的AppDomain卸载时,当主机可能不信任AppDomain状态的一致性时也是如此。 有关使用SafeHandle的好处的更多信息,请参见安全句柄和关键终结。 这个类是抽象的,因为您不能创建泛型句柄。要实现SafeHandle,必须创建一个派生类。要创建SafeHandle派生类,必须知道如何创建和释放操作系统句柄。这个过程对于不同的句柄类型是不同的,因为有些使用CloseHandle,而另一些使用更具体的方法,例如UnmapViewOfFile或FindClose。因此,必须为每个操作系统句柄类型创建一个派生类SafeHandle;例如MySafeRegistryHandle、MySafeFileHandle和MySpecialSafeFileHandle。其中一些派生类是预先编写的,并在Microsoft.Win32.SafeHandles命名空间中为您提供。
https://stackoverflow.com/questions/71068188
复制相似问题