内存泄漏时发送电子邮件

我有一个Windows服务,它被配置为以预定义的时间表发送电子邮件。 该计划适用于System.Timers.Timer,并且每次调用Timer_Elapsed时,都会调用Timer.Stop(),发送电子邮件(每次发送大约1500封电子邮件),计算下一次打勾的时间长度并启动计时器调用Timer.Start()方法)。 问题在于计时器已过并且进程开始发送电子邮件时,正在使用的内存增加,但在完成后不会减少。 当我在“未定时”应用程序中调用该函数时,在完成发送过程后释放已用内存。 任何人都可以帮助我理解为什么这会发生? 也许有关于定时器中使用的线程的东西?

提前致谢。


这里有几种可能性。

  • 垃圾收集尚未启动,并且没有内存泄漏。 随着时间的推移监控内存使用情况的动态变化,看看它是否达到峰值和稳定。

  • 您没有使用库的关闭或清空功能

  • 你的计时器正在启动一个永不终止的线程。 这很容易看到使用进程监视器并观察线程数量。

  • 内存泄漏虽然不是不可能的,但是在.net语言中是不可能的。 您不直接访问或控制内存。 由于JIT执行内存分配并清除所有你真正需要检查的东西,而不是在代码中被释放。

    没有具体细节,我不能给予更好的帮助,特别是不知道你是否在做文件IO等。


    您必须关闭SMTPClient对象连接以防止内存泄漏。

    SmtpClient客户端=新的SmtpClient(“SMTPServerAddress”); ... client.Send(message); client.ServicePoint.CloseConnectionGroup(client.ServicePoint.ConnectionName);

    链接地址: http://www.djcxy.com/p/63003.html

    上一篇: Memory leak while sending email

    下一篇: 'using' statement vs 'try finally'