0

次のメールクラスがあります。

public class Mail {
  public List<MailFile> Files { get; set; }
  public String Text { get; set; }
  // Other properties
}

public class MailFile {
  public Byte[] Data { get; set; }
  public String Mime { get; set; }
  public String Name { get; set; }
} // MailFile

Mail にはファイルのリストが含まれており、各 MailFile には File バイナリ データを含むプロパティ Data が含まれています。次に、メーラーを使用してメールを送信します。

public class Mailer : IMailer {

  private SmtpClient _client;

  public Mailer() {
    _client = new SmtpClient { UseDefaultCredentials = true };
  } // Mailer

  public void Send(Mail mail) {

    using (MailMessage message = new MailMessage()) {
      message.Text = mail.Text);
      // Define other fields
      foreach (MailFile file in mail.Files)
        message.Attachments.Add(new Attachment(new MemoryStream(x.Data), x.Name, x.Mime)));

      _client.Send(message);

    };

  } // Send

  public void Dispose() {
    Dispose(true);
  } // Dispose

  protected virtual void Dispose(Boolean disposing) {
    if (disposing) {
      if (_client != null)
        _client.Dispose();
    }
  } // Dispose

} // Mailer

MailMessage をラップしていますusing

  • しかし、この場合、メールファイルを破棄する必要がありますか?
  • メールとメール ファイルは GC によって管理および破棄されませんか?
  • Mail を使い捨てにして、その MailFiles を処分するべきではないでしょうか?
  • はいの場合、それを行うための最良の方法は何ですか?
4

2 に答える 2

1

キーワードIDisposableを使用する場合は実装する必要があります。using出典: MSDN

using ステートメントを使用すると、プログラマは、リソースを使用するオブジェクトがそれらを解放するタイミングを指定できます。using ステートメントに提供されるオブジェクトは、IDisposable インターフェイスを実装する必要があります。このインターフェイスは、オブジェクトのリソースを解放する Dispose メソッドを提供します。

特定の質問に答えるには、さらにコードを確認する必要があります。

MailMessageクラスにアンマネージ リソースまたはストリームが含まれている場合は、コードからメソッドを実装IDisposableおよび呼び出しているリソースを確実に解放する必要がありDispose()ます。

于 2013-04-09T18:06:44.467 に答える