【问题标题】:SmtpClient.Send causes memory leakSmtpClient.Send 导致内存泄漏
【发布时间】:2011-01-08 02:39:21
【问题描述】:

调用SmtpClient.Send() 时出现内存泄漏。

我有一个发送电子邮件的服务。我注意到 TaskManager 中存在内存泄漏。我将SmtpClient.Send()这一行注释掉了,当我再次启动服务时,发现内存使用量并没有增加。

【问题讨论】:

  • 很好......你能发布更多细节吗?您是如何发现 Send() 中存在内存泄漏的?您可以发布您使用的工具的输出吗?
  • 我有发送邮件的服务。 TaskManager 我注意到的内存泄漏。我评论了 SMTPClient.Send() 行,当我再次启动服务时,我注意到内存没有增长。

标签: .net smtp


【解决方案1】:

认为Taskmgr.exe 是一个泄漏检测工具是一个非常常见的错误。 .NET 垃圾收集器和 Windows 堆管理器的组合过于复杂,无法根据您在该工具中看到的数字进行逆向工程。

通过发送数千封电子邮件向自己证明这一点。如果 SmtpClient.Send() 真的泄漏,那么您的程序将很快崩溃并出现 OutOfMemory 异常。使用 Perfmon.exe 和 .NET CLR 内存类别中的性能计数器更深入地了解 .NET 程序的内存使用情况。还有一本好书,比如 Richter's CLR via C#。

【讨论】:

  • 感谢回答,不过我也用其他工具检查过内存,结果是一样的。
  • 我们不能回头看你。在你用那些“其他工具”记录你发现的东西之前,我认为没有人可以帮助你。
  • 我一次发送 1500 封邮件,我的内存增长了 30 Mb
  • 在遇到真正的问题之前,您还有大约 1800 MB 的空间。继续发送,尝试一百万。
猜你喜欢
  • 2015-07-06
  • 2014-06-07
  • 2013-11-20
  • 2011-10-28
  • 2016-01-18
  • 2012-12-13
  • 1970-01-01
  • 2011-02-01
  • 2016-01-07
相关资源
最近更新 更多