为什么我需要Dispose一个System.Net.Mail.MailMessage实例?

Rap*_*ael 33 c# email

它需要分配哪些非托管资源?它不仅仅是一个简单的托管数据阵列吗?那么为什么要处置呢?

Muh*_*han 52

邮件消息包含附件 - >附件是Streams - > Streams将被丢弃.

这是MailMessage的反编译Dispose方法:

    protected virtual void Dispose(bool disposing)
    {
        if (disposing && !this.disposed)
        {
            this.disposed = true;
            if (this.views != null)
            {
                this.views.Dispose();
            }
            if (this.attachments != null)
            {
                this.attachments.Dispose();
            }
            if (this.bodyView != null)
            {
                this.bodyView.Dispose();
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

作为一般规则,如果任何包含的子节点实现它,则类应该实现IDisposable.

  • @Raphael如果某些东西实现了IDisposable,你应该处理它.你也可以看到它还有其它的东西. (5认同)
  • 每个规则都有[例外](http://stackoverflow.com/questions/913228/should-i-dispose-dataset-and-datatable),但这不是例外情况之一. (4认同)
  • 那么这是否意味着如果邮件没有任何附件,则不需要处理? (2认同)

Dar*_*rov 13

MailMessage可以有附件,附件由MIME部分表示,MIME部分本身包含Stream.此Stream需要关闭,因为它可能包含指向底层数据的非托管指针.