我有一段蚂蚁分析器指向的代码,导致内存泄漏。我已经在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
。这就是我想要实现的目标。但上面的代码似乎在泄漏内存,内存永远不会返回。因此,如果有人可以帮助优化它,那就太好了。
答案 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
}