发送电子邮件时内存泄漏
-
22-09-2019 - |
题
我有一个 Windows 服务,它被配置为按预定义的时间表发送电子邮件。该计划与 System.Timers.Timer 配合使用,每次引发 Timer_Elapsed 时,我都会调用 Timer.Stop(),发送电子邮件(每次约 1500 封电子邮件),计算下一个滴答声将引发的时间量并启动计时器(调用 Timer.Start() 方法)。问题是,当计时器结束并且进程开始发送电子邮件时,使用的内存会增加,但完成后不会减少。当我在“不定时”应用程序中调用该函数时,所使用的内存在完成发送过程后将被释放。谁能帮助我理解为什么会发生这种情况?也许与计时器中使用的线程有关?
提前致谢。
解决方案
这里有一些明显的可能性。
垃圾收集尚未启动,并且不存在内存泄漏。随着时间的推移进行监控,了解内存使用情况的动态情况,并查看其是否达到峰值并稳定下来。
您没有使用库的关闭或刷新功能
您的计时器正在启动一个永远不会终止的线程。使用进程监视器并观察线程计数很容易看到这一点。
内存泄漏虽然并非不可能,但在 .net 语言中是不可能发生的。您不是直接访问或控制内存。由于 JIT 会进行内存分配并清除所有内容,因此您真正需要检查的是代码中未释放的内容。
如果没有具体细节,我无法提供更好的帮助,特别是不知道您是否正在执行文件 IO 等。
其他提示
您必须关闭SMTPClient对象连接以防止内存泄漏。
SmtpClient客户=新SmtpClient( “SMTPServerAddress”); ... client.Send(消息); client.ServicePoint.CloseConnectionGroup(client.ServicePoint.ConnectionName);