1

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

提前致谢。

4

2 回答 2

1

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

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

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

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

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

没有细节我不能提供更好的帮助,尤其是不知道你是否在做文件 IO 等。

于 2010-01-25T06:40:13.763 回答
0

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

SmtpClient 客户端 = new SmtpClient("SMTPServerAddress"); ...客户端。发送(消息);client.ServicePoint.CloseConnectionGroup(client.ServicePoint.ConnectionName);

于 2010-01-26T11:40:26.580 回答