在另一个线程中使用线程时发生内存泄漏

时间:2010-12-02 01:32:50

标签: c# multithreading memory memory-leaks

下面的示例代码有内存泄漏。如果我在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 (; ; )
        { }           
    }

6 个答案:

答案 0 :(得分:3)

答案 1 :(得分:3)

答案 2 :(得分:1)

答案 3 :(得分:0)

需要处理Timer对象!

答案 4 :(得分:0)

看起来你正在创建新项目,因为有一个代码的递归调用,并且在运行时可能会出现某种循环,导致对多个对象副本的内存不整齐填充,因为每个被调用的项目都没有完全完成。

答案 5 :(得分:0)

RefreshTimer_Elapsed在每个间隔创建一个新线程。匿名方法做了什么工作?它完成了吗?您创建的每个线程都将通过Windows分配1MB的虚拟内存。

如果线程永远不会完成,那么每隔一段时间,你将消耗另外1MB的内存。

相关问题