C# 是否需要关闭/处理安全手柄

C# 是否需要关闭/处理安全手柄,c#,C#,我在代码中使用了SafeHandles,注意到它们有Close和Dispose方法 这让我怀疑SafeHandles是否由垃圾收集器处理并在使用后处理 例如,如果我得到这样一个句柄,我是否需要在使用完.Dispose或.Close方法后调用它 var process Process.GetProcessesByName("notepad")[0]; var handle = process.SafeHandle; 发件人: 在释放上一个文件之前,始终调用Close或Dispose方法 对Sa

我在代码中使用了SafeHandles,注意到它们有Close和Dispose方法

这让我怀疑SafeHandles是否由垃圾收集器处理并在使用后处理

例如,如果我得到这样一个句柄,我是否需要在使用完.Dispose或.Close方法后调用它

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__;()看起来不像您分配了资源。但如果你这样做了,我会首先担心
过程。