Почему мне нужно удалить экземпляр System.Net.Mail.MailMessage? - PullRequest
33 голосов
/ 12 декабря 2011

Какие неуправляемые ресурсы он выделяет, которые необходимо утилизировать?Разве это не простой массив управляемых данных?Так зачем избавляться?

Ответы [ 2 ]

50 голосов
/ 12 декабря 2011

Почтовое сообщение имеет вложения -> вложения - это Потоки -> Потоки должны быть удалены.

Вот декомпилированный метод Dispose для 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();
            }
        }
    }

Как правило, aкласс должен реализовывать IDisposable, если любой из содержащихся в нем потомков реализует его.

13 голосов
/ 12 декабря 2011

MailMessage может иметь вложения, вложение представлено частью MIME, которая сама содержит поток.Этот поток необходимо закрыть, поскольку он может содержать неуправляемый указатель на базовые данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...