Какие неуправляемые ресурсы он выделяет, которые нужно утилизировать? Разве это не просто массив управляемых данных? Так зачем распоряжаться?
Зачем мне удалять экземпляр System.Net.Mail.MailMessage?
Ответ 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. Этот поток требует закрытия, поскольку он может содержать неуправляемый указатель на базовые данные.