我在代码中使用SafeHandles,并注意到它们具有Close和Dispose方法。
这让我想知道SafeHandles是否由垃圾收集器处理并在使用后丢弃。
例如,如果我有一个这样的句柄,在使用完之后是否需要调用.Dispose或.Close方法。
var process Process.GetProcessesByName("notepad")[0];
var handle = process.SafeHandle;
答案 0 :(得分:1)
在释放最后一个之前,始终调用Close或Dispose方法 对SafeHandle对象的引用。否则,它就是资源 直到垃圾收集器调用 SafeHandle对象的Finalize方法。
答案 1 :(得分:1)
调用Close
或Dispose
方法可使resources
成为freed
。如果其他线程正在使用安全句柄的相同实例,则可能不会立即发生这种情况,但是一旦不再是这种情况就会立即发生。尽管大多数使用SafeHandle
的类都不需要提供finalizer
,但是有时这是必需的(例如,刷新文件缓冲区或将某些数据写回到内存中)。在这种情况下,他们可以提供保证在finalizer
关键SafeHandle
运行之前运行的finalizer
。
在释放对call
对象的最后引用之前,请始终使用Close
或Dispose
方法。否则,除非垃圾回收器调用SafeHandle
对象的SafeHandle
,否则它将不会释放正在使用的资源。
永远不要
Finalize method
和explicitly call
设置为Dispose method
的{{1}}