反之亦然。
首先,您在中使用的所有类型。NET进行管理。但有些托管类型封装了非托管资源,如Windows句柄。
封装非托管资源的类型通常实现
IDisposable
. 这个
IDisposable可识别
接口允许您通过调用
Dispose()
,或将其放入
using
. 在后一种情况下,
Dispose()
退出的作用域时自动调用
使用
.
无论如何,即使
Dispose()
未在实现它的对象上调用,设计良好的类应在中释放其非托管资源
Finalize()
(基本上是析构函数)。但是
完成()
由GC调用,我们不知道调用GC的频率,这意味着释放资源的过程不确定。没有
IDisposable可识别
,我们将长期持有昂贵的非托管资源,这远远超出了我们的需要。
当类型未实现时
IDisposable可识别
,这表示它不包含非托管资源,并且没有理由显式地处理它(当然,前提是类型设计良好)。
请注意,一些实现
IDisposable可识别
不要实际持有任何非托管资源。例如,测量执行时间的类可以实现
IDisposable可识别
,以便在构造函数中保存时间戳,然后在
Dispose
它获取当前时间戳并计算经过的时间,并将其报告给某些日志记录机制。当你把这样一门课放进去的时候
使用
,您可以获得一种方便的方法来测量代码块的执行时间。