我有一個C#服務連續運行與用戶憑據(即不是本地系統 - 我不能改變這一點,雖然我想)。在大多數情況下,該服務似乎運行正常,但經常彈出,無明顯原因重新啓動(服務器管理器設置爲在崩潰時重新啓動服務)。正確處理資源使用SmtpClient
我做大幅度事件記錄,我有一個分層方法到異常處理,我認爲它可以使至少某種意義:
- 從本質上講,我得到了頂級泛型異常,空異常和啓動異常處理程序。
- 然後我在「命令級別」(即特定的服務運行行爲)
- 最後我處理在類級別處理的幾個例外
我一直有不同的處理程序看看是否有任何資源沒有正確發佈,我開始懷疑我的郵件代碼(發送電子郵件)。我注意到我沒有調用MailMessage對象的Dispose,現在我已經重寫了SendMail代碼,如下所示。
的基本問題是:
- 將這段代碼正確釋放用於發送郵件的所有資源?
- 我看不到處置的SmtpClient對象?
- (備案:我沒有使用對象初始化,使樣品更易於閱讀)
private static void SendMail(string subject, string html)
{
try
{
using (var m = new MailMessage())
{
m.From = new MailAddress("[email protected]");
m.To.Add("[email protected]");
m.Priority = MailPriority.Normal;
m.IsBodyHtml = true;
m.Subject = subject;
m.Body = html;
var smtp = new SmtpClient("mailhost");
smtp.Send(m);
}
}
catch (Exception ex)
{
throw new MyMailException("Mail error.", ex);
}
}
感謝您的信息 - 我可能不得不看看。令人奇怪的是,MailMessage對象實現了IDisposable,但SmtpClient卻沒有。 – 2009-07-14 22:40:55