【发布时间】:2019-03-18 10:05:09
【问题描述】:
我对这种模式感到困惑。
如果 disposing 为真(从 Dispose() 调用),我们将在那里释放托管对象。 如果 disposing 为 false(从 Finalizer() 调用),则访问引用的对象是不安全的,这些引用的对象是文件流等非托管对象。
如果 disposing 为真,那么我们将无法释放非托管对象? 如果 disposing 为 false,我们将无法释放托管对象?
搜索这个模式,在 Dispose(boolean) 方法中有不同的实现。 MSDN implementation
这是我从示例和教程中得到的。
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
// Free any other managed objects here.
}
else
{
//not safe to access referenced object
}
// Free any unmanaged objects here.
}
disposed = true;
}
【问题讨论】:
-
// Free any unmanaged objects here.“执行”disposing是否为真。再看控制流。 -
...像文件流这样的非托管对象。
FileStream是一个托管对象,底层文件句柄将是非托管对象。
标签: c# garbage-collection