Hey, j'essaie d'utiliser la bibliothèque Microsoft.MSHTML (Version 7.0.3300.0) pour extraire le texte du corps à partir d'une chaîne HTML. J'ai extrait cette fonctionnalité dans une seule méthode d'assistance GetBody (string).Utilisation de Microsoft.MSHTML dans une boucle, fuite de mémoire
Lorsqu'il est appelé dans une boucle infinie, le processus manque finalement de mémoire (confirmé par l'utilisation de Mem dans Task Manager). Je suspecte que le problème est dû à mon nettoyage incorrect des objets MSHTML. Qu'est-ce que je fais mal?
Ma définition actuelle de GetBody (string) est:
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;
}
Edit: la fuite de mémoire a été tracée au code utilisé dans peuplant une valeur pour html. Dans ce cas, c'était Outlook Redemption.
MSHTML peut lui-même avoir une fuite interne. Exactement combien de temps avez-vous laissé courir cette "boucle infinie"? – EricLaw
La boucle fonctionne pour ~ 500k appels. À ce stade, l'utilisation de la mémoire a atteint 1.6gb et System.OutOfMemoryExceptions commence à être lancé. – NoizWaves