内存泄漏使用定时器

时间:2014-11-06 06:19:46

标签: c# .net timer

我有一段蚂蚁分析器指向的代码,导致内存泄漏。我已经在1周的时间内监控了应用程序,但内存似乎在增加而不会回来。所以我有点担心下面的代码。

      public void printXML(XmlDocument doc)
        {
            //System.Threading.Timer timer = null;
            XmlWriterSettings settings = new XmlWriterSettings { Encoding = Encoding.UTF8, Indent = true };
            new System.Threading.Timer((_) =>
            {
                using (var writer = XmlWriter.Create(_folderDestination, settings))
                {
                    //                Task.Delay(15000).ContinueWith(_ => doc.Save(writer));                
                    doc.Save(writer);
                }
            }).Change(15000, -1);

        }

每次调用方法printXML时,它会在15秒后将doc写入_folderDestination。这就是我想要实现的目标。但上面的代码似乎在泄漏内存,内存永远不会返回。因此,如果有人可以帮助优化它,那就太好了。

1 个答案:

答案 0 :(得分:2)

System.Threading.Timer实现IDisposable。

将其包含在using语句中以确保它正确处理。

如果计时器的目的是延迟执行,另一种方法可以使用新的Thread并执行Thread.Sleep。

    public void printXML(XmlDocument doc)
    {
        var thread = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(DelayPrint));
        thread.Start(doc);
    }

    void DelayPrint(object param)
    {
        System.Threading.Thread.Sleep(15000);              
        XmlDocument doc = param as XmlDocument;
        // Do Work
    }