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 でした。