gpt4 book ai didi

email - 正确处理 SmtpClient 使用的资源

转载 作者:行者123 更新时间:2023-12-04 15:05:34 27 4
gpt4 key购买 nike

我有一个 C# 服务 那个连续运行 使用用户凭据(即不是本地系统 - 虽然我想更改但我无法更改)。在大多数情况下,该服务似乎运行正常,但它经常爆炸和 无故重启 (服务管理器设置为在崩溃时重新启动服务)。

我做的很充实事件日志 ,我有一个 分层方法 异常处理 我认为至少有某种意义:

  • 基本上我得到了 顶级通用异常、空异常和启动异常处理程序。
  • 然后我在“ 命令级别 ”(即服务运行的特定操作)
  • 获得了各种处理程序
  • 最后我处理了在 处理的一些异常类(class)

  • 我一直在查看是否有任何资源没有正确释放,我开始怀疑我的邮件代码(发送电子邮件)。我注意到我没有为 调用 Dispose邮件消息对象 ,现在我已经重写了 SendMail 代码,如下所示。

    基本问题是:
  • 这段代码会正确释放用于发送邮件的所有资源吗?
  • 我看不到 的方法处置 SmtpClient 对象 ?
  • (记录:我没有使用对象初始值设定项来使示例更易于阅读)

  •     private static void SendMail(string subject, string html)
    {
    try
    {
    using ( var m = new MailMessage() )
    {
    m.From = new MailAddress("service@company.com");
    m.To.Add("user@company.com");
    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);
    }
    }

    最佳答案

    我知道这个问题是 .Net 4 之前的,但版本 4 现在支持 Dispose 方法,该方法可以正确地向 smpt 服务器发送退出。见 msdn referencea newer stackoverflow question .

    关于email - 正确处理 SmtpClient 使用的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1128390/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com