嘿,我試圖使用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