Why do I need to Dispose a System.Net.Mail.MailMessage instance?

后端 未结 2 777
失恋的感觉
失恋的感觉 2020-11-30 13:38

What unmanaged resources does it allocates that needs to be disposed? Isn\'t it just a simple array of managed data? So why disposing?

相关标签:
2条回答
  • 2020-11-30 14:03

    A mail message has attachments -> attachments are Streams -> Streams are to be disposed.

    Here is the decompiled Dispose method of MailMessage:

        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();
                }
            }
        }
    

    As a general rule a class should implement IDisposable if any of its contained children implement it.

    0 讨论(0)
  • 2020-11-30 14:19

    A MailMessage can have attachments, an attachment is represented by MIME part which itself holds a Stream. This Stream needs closing as it might hold an unmanaged pointer to the underlying data.

    0 讨论(0)
提交回复
热议问题