嘿,我试图使用Microsoft.MSHTML(版本7.0.3300.0)库从HTML字符串中提取正文文本。我已经将这个功能抽象成一个帮助方法GetBody(string)。在循环中使用Microsoft.MSHTML,内存泄漏
当在无限循环中调用时,该进程最终将耗尽内存(通过观察任务管理器中的内存使用情况进行确认)。我怀疑这个问题是由于我对MSHTML对象的错误清理。我究竟做错了什么?
我当前GetBody(串)的定义是:
public static string GetBody(string html)
{
mshtml.IHTMLDocument2 htmlDoc = null;
mshtml.IHTMLElement bodyElement = null;
string body;
try
{
htmlDoc = new mshtml.HTMLDocumentClass();
htmlDoc.write(html);
bodyElement = htmlDoc.body;
body = bodyElement.innerText;
}
catch (Exception ex)
{
Trace.TraceError("Failed to use MSHTML to parse HTML body: " + ex.Message);
body = email.Body;
}
finally
{
if (bodyElement != null)
Marshal.ReleaseComObject(bodyElement);
if (htmlDoc != null)
Marshal.ReleaseComObject(htmlDoc);
}
return body;
}
编辑:内存泄漏已被追踪到在填充HTML的值使用的代码。在这种情况下,它是Outlook Redemption。
MSHTML本身可能在内部泄漏。你究竟让这个“无限循环”运行多久? – EricLaw 2010-01-07 03:07:50
循环运行约500k次呼叫。在那个阶段,内存使用量达到了1.6GB,并且System.OutOfMemoryExceptions开始被抛出。 – NoizWaves 2010-01-07 05:19:32