Dispose方法在C#中做什么?
当我编写邮件传递服务时,我发现“Dispose()”函数:Dispose方法在C#中做什么?,c#,.net,C#,.net,当我编写邮件传递服务时,我发现“Dispose()”函数: private void InnerDisposeMessage(MailMessage message) { if (message != null) { if (message.AlternateViews.Count > 0) { message.Altern
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;
}
}
protected virtual void Dispose(bool disposing)
{
if (disposing && !this.disposed)
{
this.disposed = true;
this.part.Dispose();
}
}
public void Dispose()
{
if (this.stream != null)
{
this.stream.Close();
}
}
我跟踪到view.Dispose()函数,如下所示:
public void Dispose()
{
if (!this.disposed)
{
foreach (AlternateView view in this)
{
view.Dispose();
}
base.Clear();
this.disposed = true;
}
}
protected virtual void Dispose(bool disposing)
{
if (disposing && !this.disposed)
{
this.disposed = true;
this.part.Dispose();
}
}
public void Dispose()
{
if (this.stream != null)
{
this.stream.Close();
}
}
然后我跟踪到this.part.Dispose();函数,如下所示:
public void Dispose()
{
if (!this.disposed)
{
foreach (AlternateView view in this)
{
view.Dispose();
}
base.Clear();
this.disposed = true;
}
}
protected virtual void Dispose(bool disposing)
{
if (disposing && !this.disposed)
{
this.disposed = true;
this.part.Dispose();
}
}
public void Dispose()
{
if (this.stream != null)
{
this.stream.Close();
}
}
我追踪着溪流:
public virtual void Close()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}
以及
public static void SuppressFinalize(object obj)
{
if (obj == null)
{
throw new ArgumentNullException("obj");
}
_SuppressFinalize(obj);
}
但是如何释放资源呢?我只是理解调用垃圾收集来释放,但是如何释放呢
我知道这个问题不容易理解,但我只是想试试
GC.SuppressFinalize(this)函数做什么?您认为找到的代码“调用垃圾收集以释放”底层资源的假设是不正确的 在核心部分,您的消息使用了一个
SuppressFinalize
不是您想要的(如果您感兴趣,它只是为GC设置了一个标志,并解释了更多细节)。但是,您实际上是在寻找正在使用的流的Dispose
的实现。流允许您向某个源或目标读取或写入数据
有许多不同种类的溪流。流所做的一切就是包装某种资源,例如磁盘上的文件、网络上的文件、web服务器上的文件、邮件服务器上的文件、打印机上的文件、内存中的文件或计算机必须提供的几乎任何类型的数据资源。因此,Dispose
方法通常只是“关闭”资源(例如,它关闭流使用的文件或网络连接)
大多数流通过放置与负责的操作系统通信来打开/读取/写入/关闭底层资源。如果你对这方面的低级细节感兴趣,你可能想读一本好书或上一门在线课程。FYI,
Dispose
不是C#的一部分。它是.NET的一部分,这是不一样的。我投票决定不公开,因为这不是一个设计模式问题,就像链接复制一样。太好了。查找其他999个问题中的一个,这是的副本。