嘿,我正在尝试使用 Microsoft.MSHTML(版本 7.0.3300.0)库从 HTML 字符串中提取正文。我已将此功能抽象为单个辅助方法 GetBody(string)。
当在无限循环中调用时,该进程最终会耗尽内存(通过在任务管理器中查看 Mem Usage 来确认)。我怀疑问题是由于我对 MSHTML 对象的错误清理造成的。我究竟做错了什么?
我目前对 GetBody(string) 的定义是:
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。