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

时间:2011-12-12 16:50:37

标签: c# email

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

2 个答案:

答案 0 :(得分:50)

邮件邮件附件 - >附件是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();
            }
        }
    }

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

答案 1 :(得分:13)

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