下面的示例代码有内存泄漏。如果我在RefreshTimer_Elapsed中注释掉两行,那么内存泄漏就消失了。有人知道什么是错的吗?谢谢你的帮助。
static void RefreshTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
Thread innerThread = new Thread(delegate() { });
innerThread.Start();
}
static void Main(string[] args)
{
System.Timers.Timer RefreshTimer = new System.Timers.Timer();
RefreshTimer.Interval = 5000;
RefreshTimer.Elapsed += new System.Timers.ElapsedEventHandler(RefreshTimer_Elapsed);
RefreshTimer.Start();
for (; ; )
{ }
}
答案 0 :(得分:3)
答案 1 :(得分:3)
答案 2 :(得分:1)
答案 3 :(得分:0)
需要处理Timer对象!
答案 4 :(得分:0)
看起来你正在创建新项目,因为有一个代码的递归调用,并且在运行时可能会出现某种循环,导致对多个对象副本的内存不整齐填充,因为每个被调用的项目都没有完全完成。
答案 5 :(得分:0)
RefreshTimer_Elapsed在每个间隔创建一个新线程。匿名方法做了什么工作?它完成了吗?您创建的每个线程都将通过Windows分配1MB的虚拟内存。
如果线程永远不会完成,那么每隔一段时间,你将消耗另外1MB的内存。