我有一段蚂蚁剖析器指向的代码导致内存泄漏。我已经在一周的时间内监控了应用程序,但内存似乎在增加,而不是回来。所以我有点关心下面的代码。使用定时器的内存泄漏
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
被称为它的周期15secs的后会写doc
到_folderDestination
。这是我想要实现的。但是上面的代码似乎在泄漏内存,内存永远不会返回。所以如果有人能够帮助优化它,那会很好。
注意:你的'定时器'有资格进行垃圾回收。您需要存储定时器的引用以防止它被GC'd。 – 2014-11-06 06:31:44
我很好奇,为什么你用'Task.Delay'评论解决方案?正如@SriramSakthivel提到的那样,你的计时器将由GC收集,你的代码永远不会执行。 'Task.Delay'在这里更容易。 – Dennis 2014-11-06 06:47:33
@丹尼斯:代码执行,我有15秒的效果,但我更关心的内存问题 – user726720 2014-11-06 06:52:40