发送电子邮件时内存泄漏

时间:2010-01-25 06:29:25

标签: .net memory-leaks timer smtpclient

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

提前致谢。

2 个答案:

答案 0 :(得分:1)

这里有一些可能性。

  1. 垃圾收集没有启动,没有内存泄漏。随着时间的推移监控以查看内存使用情况的动态程度,看它是否达到峰值并稳定下来。

  2. 您没有使用库的关闭或刷新功能

  3. 您的计时器正在启动永不终止的线程。使用进程监视器和观察线程数很容易看到。

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

    如果没有具体细节,我无法提供更好的帮助,特别是不知道你是否正在进行文件IO等。

答案 1 :(得分:0)

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

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