我有一个 Windows 服务,它被配置为按预定义的时间表发送电子邮件。该计划与 System.Timers.Timer 配合使用,每次引发 Timer_Elapsed 时,我都会调用 Timer.Stop(),发送电子邮件(每次约 1500 封电子邮件),计算下一个滴答声将引发的时间量并启动计时器(调用 Timer.Start() 方法)。问题是,当计时器结束并且进程开始发送电子邮件时,使用的内存会增加,但完成后不会减少。当我在“不定时”应用程序中调用该函数时,所使用的内存在完成发送过程后将被释放。谁能帮助我理解为什么会发生这种情况?也许与计时器中使用的线程有关?

提前致谢。

有帮助吗?

解决方案

这里有一些明显的可能性。

  1. 垃圾收集尚未启动,并且不存在内存泄漏。随着时间的推移进行监控,了解内存使用情况的动态情况,并查看其是否达到峰值并稳定下来。

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

  3. 您的计时器正在启动一个永远不会终止的线程。使用进程监视器并观察线程计数很容易看到这一点。

内存泄漏虽然并非不可能,但在 .net 语言中是不可能发生的。您不是直接访问或控制内存。由于 JIT 会进行内存分配并清除所有内容,因此您真正需要检查的是代码中未释放的内容。

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

其他提示

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top