Подтвердить что ты не робот

Зачем мне удалять экземпляр System.Net.Mail.MailMessage?

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

4b9b3361

Ответ 1

У почтового сообщения есть вложения → вложения - это потоки → Потоки должны быть удалены.

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

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

Ответ 2

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