当我编写邮件投递服务时,我发现了“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) 函数有什么作用?