Ich habe einen C# Service dass läuft kontinuierlich mit Benutzerdaten (das heißt nicht als Localsystem - Das kann ich nicht verändern, auch wenn ich will). In den meisten Fällen scheint der Dienst in Ordnung zu sein, aber immer wieder bombardiert er und startet ohne ersichtlichen Grund (Servicer Manager ist so eingestellt, dass der Dienst bei einem Absturz neu gestartet wird).ordnungsgemäß entsorgen Ressourcen, die von SmtpClient
Ich mache erhebliche Ereignis anmelden, und ich habe einen geschichteten Ansatz zu Ausnahme Handhabung, dass ich glaube, zumindest eine Art von Sinn macht:
- Im Grunde habe ich die Top-Level generische Ausnahme, Null-Ausnahme und Startausnahmehandler.
- Dann habe ich verschiedene Handler an den „Kommandoebene“ (dh spezifischen Aktionen, die der Dienst)
- Schließlich ich mit ein paar Ausnahmen auf der Ebene Klasse behandelt
Ich war Ich prüfe, ob irgendwelche Ressourcen nicht richtig freigegeben sind, und ich fange an, meinen Mailing-Code zu verdächtigen (E-Mail senden). Ich bemerkte, dass ich nicht Dispose für das MailMessage-Objekt anrief, und ich habe den SendMail-Code wie unten dargestellt neu geschrieben.
Die grundlegende Frage ist:
- wird dieser Code ordnungsgemäß alle Ressourcen freigeben verwendet Mails schicken?
- Ich sehe keinen Weg zu entsorgenSmtpClient Objekt?
- :
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);
}
}
Danke für die Info - ich muss das vielleicht sehen. Es ist seltsam, dass das MailMessage-Objekt IDisposable implementiert, der SmtpClient jedoch nicht. –
Ja. Es scheint eine Arbeit auf diesem Link zu geben. Vielleicht möchten Sie das überprüfen. –