C# 是否需要关闭/处理安全手柄
我在代码中使用了SafeHandles,注意到它们有Close和Dispose方法 这让我怀疑SafeHandles是否由垃圾收集器处理并在使用后处理 例如,如果我得到这样一个句柄,我是否需要在使用完.Dispose或.Close方法后调用它C# 是否需要关闭/处理安全手柄,c#,C#,我在代码中使用了SafeHandles,注意到它们有Close和Dispose方法 这让我怀疑SafeHandles是否由垃圾收集器处理并在使用后处理 例如,如果我得到这样一个句柄,我是否需要在使用完.Dispose或.Close方法后调用它 var process Process.GetProcessesByName("notepad")[0]; var handle = process.SafeHandle; 发件人: 在释放上一个文件之前,始终调用Close或Dispose方法 对Sa
var process Process.GetProcessesByName("notepad")[0];
var handle = process.SafeHandle;
发件人:
在释放上一个文件之前,始终调用Close或Dispose方法
对SafeHandle对象的引用。否则,它所拥有的资源
直到垃圾收集器调用
SafeHandle对象的Finalize方法
调用
Close
或Dispose
方法可以释放资源
。如果其他线程正在使用相同的安全句柄实例,这可能不会立即发生,但一旦情况不再如此,就会立即发生。尽管大多数使用SafeHandle
的类不需要提供终结器
,但这有时是必要的(例如,清除文件缓冲区或将一些数据写回内存)。在这种情况下,它们可以提供一个终结器
,该终结器保证在安全句柄
关键终结器
运行之前运行
在释放对SafeHandle
对象的最后一次引用之前,始终调用Close
或Dispose
方法。否则,在垃圾收集器调用SafeHandle
对象的Finalize方法之前,它正在使用的资源将不会被释放
如果disposing参数设置为false
通常有一个理由可以实现IDisposable
。因此,依靠这一点,处理可能是一次性的。即使因为类没有任何非托管资源,所以当前没有必要,但将来可能会发生变化。更多信息:请参见这里的模式有点模糊,GetProcessBy__;()看起来不像您分配了资源。但如果你这样做了,我会首先担心过程。