Phi*_*idt 1 c# email idisposable attachment
我有一些代码来添加电子邮件的附件.我是通过类构造函数的Stream重载添加它们的Attachment.执行此操作的代码如下所示:
List<UploadedDocument> docs = DataBroker.GetUploadedDocs(Convert.ToInt32(HttpContext.Current.Session["offer_id"].ToString()));
//no need to keep this in session
HttpContext.Current.Session["offer_id"] = null;
int counter = 1;
foreach (UploadedDocument doc in docs)
{
stream = new MemoryStream(doc.doc);
attach = new Attachment(stream, "Attachment-" + counter.ToString());
message.Attachments.Add(attach);
}
Run Code Online (Sandbox Code Playgroud)
doc.doc字节数组在哪里.我想正确处理每一个附件和流的,但我不能这样做,直到该消息已发送,所以我想只是将其添加到List<Attachment>和List<Stream>,然后通过迭代和呼叫处理.
像这样的东西:
List<Attachment> attachments;
List<Stream> streams;
//...
foreach(UploadedDocument doc in docs)
{
stream = new MemoryStream(doc.doc);
streams.Add(stream);
attach = new Attachment(stream,"Name");
attachments.Add(attach);
message.Attachments.Add(attach);
}
//other processing
emailClient.Send(message);
if(attachments != null)
{
foreach(Attachment attachment in attachments)
{
attachment.Dispose();
}
}
if(streams != null)
{
foreach(MemoryStream myStream in streams)
{
myStream.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
但有些东西告诉我,如果仍然有一个没有收集垃圾或其他东西的参考,那么就不会正确处理它们.有什么想法吗?
处理这个问题最简单的方法就是调用Dispose()它MailMessage.
MailMessage.Dispose将自动处理所有附件,这些附件将关闭/ Dispose()所有底层流.
//other processing
emailClient.Send(message);
message.Dispose(); // Or just wrap this entire block in a using statement
Run Code Online (Sandbox Code Playgroud)