【发布时间】:2013-12-21 22:49:18
【问题描述】:
我在写邮件投递服务时,发现'Dispose()'函数:
private void InnerDisposeMessage(MailMessage message)
{
if (message != null)
{
if (message.AlternateViews.Count > 0)
{
message.AlternateViews.Dispose();
}
message.Dispose();
message = null;
}
}
我跟踪到Dispose() 函数(message.AlternateViews.Dispose();),这里是:
public void Dispose()
{
if (!this.disposed)
{
foreach (AlternateView view in this)
{
view.Dispose();
}
base.Clear();
this.disposed = true;
}
}
我跟踪到 view.Dispose() 函数,这里是:
protected virtual void Dispose(bool disposing)
{
if (disposing && !this.disposed)
{
this.disposed = true;
this.part.Dispose();
}
}
我跟踪到 this.part.Dispose();函数,这里是:
public void Dispose()
{
if (this.stream != null)
{
this.stream.Close();
}
}
我跟踪到流:
public virtual void Close()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}
和 SuppressFinalize:
public static void SuppressFinalize(object obj)
{
if (obj == null)
{
throw new ArgumentNullException("obj");
}
_SuppressFinalize(obj);
}
但是资源如何被释放呢?我只是理解调用垃圾收集来释放,但是如何呢?
我知道这个问题不好理解,但我就是想试试!
GC.SuppressFinalize(this) 函数有什么作用?
【问题讨论】:
-
仅供参考,
Dispose不是 C# 的一部分。它是 .NET 的一部分,这不是一回事。 -
我投票决定保持开放,因为这不像链接副本那样是设计模式问题。
-
太棒了。找出与此重复的其他 999 个问题之一。