Comment faire pour Réparer la Fuite de Mémoire dans IE Contrôle WebBrowser?

Je suis en train d'intégrer un Contrôle WebBrowser dans un C# Winform Application. Cela semble assez facile. Cependant, j'ai découvert que le contrôle WebBrowser mange beaucoup de mémoire chaque fois que j'appelle la méthode de navigation. La mémoire n'est jamais sorti. L'utilisation de la mémoire se développe et grandit...

Beaucoup de gens sur le net d'avoir exactement le même problème mais je n'ai pas trouvé une réponse satisfaisante encore. C'est le meilleur des discussions sur ce thème que j'ai trouvé jusqu'à présent:

Fuite de mémoire dans IE Contrôle WebBrowser

Une personne a suggéré une mise à niveau vers IE8 pour résoudre le problème.

Cependant j'ai besoin d'une solution qui fonctionne si l'utilisateur dispose de la dernière version de IE est installé ou pas. Je n'ai pas de contrôle sur l'environnement des utilisateurs.

Quelqu'un sait comment libérer la mémoire utilisée par le contrôle WebBrowser? Existe-il des solutions de contournement? Existe-il des alternatives pour le contrôle WebBrowser?

Mise à jour:
Je viens de faire quelques tests. Au travail je suis sous Windows XP et IE6. La mémoire n'est pas qui y poussent. La mémoire augmente lors de l'appel de la méthode de naviguer, mais qu'il est libéré après un certain temps. À la maison, je suis sous Vista et mis à niveau vers IE8. Ici aussi je ne vois pas le problème plus. On dirait que le problème est spécifique à la version IE7. Donc, la question devrait être reformulée pour "Comment Réparer la Fuite de Mémoire dans IE Contrôle WebBrowser lorsque IE7 est installé". Quelqu'un peut-il confirmer que ce problème est spécifique à la version IE7?

  • Il y a une fuite de mémoire si vous ajouter des gestionnaires d'événements pour toute la navigué éléments. À corriger, vous devrez garder un dictionnaire de tous les éléments (inclure le document de niveau supérieur de trop), puis dans le OnDocumentCompleted fonction de (), supprimer les gestionnaires d'événements un par un tout en appelant marshall.ReleaseComObject(o.DomDocument) dans une boucle, puis, enfin, relâchez le document de niveau supérieur via le Maréchal.ReleaseComObject(document.DomDocument).
InformationsquelleAutor Rainer Falle | 2009-05-24