C'est un fait largement connu, vieux problème avec la .NET contrôle Webbrowser.
Résumé: après Avoir de la .NET contrôle webbrowser Accédez à une page augmente l'utilisation de la mémoire qui n'est jamais libérée.
Reproduire la fuite de mémoire: Ajouter un contrôle WebBrowser à un formulaire. L'utiliser pour Naviguer jusqu'à ce que les pages que vous le souhaitez. about:blank œuvres, le défilement vers le bas sur Google Images, jusqu'à ce que votre utilisation est de 100 mo+ et puis en cherchant d'ailleurs à remarquer peine de tout de qui est libéré de la mémoire est une démonstration plus spectaculaire.
Mes exigences actuelles pour une application courante pendant de longues périodes de temps, l'affichage d'un limitées IE7 fenêtre du navigateur. L'exécution de IE7 lui-même avec quelques bâtard d'installation de crochets, les Bho et les stratégies de groupe n'est pas désiré soit, même si c'est à la recherche comme le secours à ce moment. Intégration d'un navigateur web dans une application Windows Forms. À l'aide d'un autre navigateur de base n'est pas une option disponible pour moi. IE7 est nécessaire.
Précédente fils et articles relatifs à cette fuite de mémoire connus:
- http://www.vbforums.com/showthread.php?t=644658
- Comment faire pour Réparer la Fuite de Mémoire dans IE Contrôle WebBrowser?
- Fuite de mémoire lors de l'utilisation de WPF contrôle WebBrowser dans plusieurs fenêtres
- http://social.msdn.microsoft.com/Forums/en-US/ieextensiondevelopment/thread/88c21427-e765-46e8-833d-6021ef79e0c8/
- http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/8a2efea4-5e75-4e3d-856f-b09a4e215ede
- http://dotnetforum.net/topic/17400-appdomain-webbrowser-memory-leak/
Souvent proposé des correctifs qui NE fonctionnent PAS:
- Va différentes pages n'a pas d'importance. about:blank déclenche la fuite. Il ne nécessite pas une page javascript, ou n'importe quelle autre technologie.
- À l'aide de différentes versions d'Internet Explorer n'a pas d'importance. 7, 8 et 9 présentent tous les mêmes symptômes, et autant que j'en ai entendu, toutes les versions ont la même fuite de mémoire dans le contrôle.
- Dispose()ing du contrôle n'aide pas.
- La Collecte des ordures n'aide pas. (En fait, les recherches que j'ai fait en cela indique que la fuite est dans la COM non managé code de l'Webbrowswer de contrôle de l'enveloppe.)
- La réduction et l'paramètre de processus de mémoire disponible pour l'-1, -1(SetProcessWorkingSetSize() ou simimlar.) seulement réduit l'utilisation de la mémoire physique, n'a pas d'impact sur la mémoire virtuelle.
- Appel WebBrowser.Stop() n'est pas une solution, et les sauts de fonctionnalités pour l'utilisation de quelque chose, mais la page statique, sans en faire plus que simplement de minimiser la fuite légèrement.
- Forcer une attente pour un document pour charger complètement avant de Naviguer à l'autre aussi ne l'aide pas.
- De charger le contrôle dans un autre domaine d'application ne permet pas de résoudre le problème. (Je n'ai pas fait moi-même, mais la recherche montre que d'autres aient pas de succès avec cette route.)
- L'aide d'un autre wrapper comme csexwb2 n'aide pas, car cela aussi souffre du même problème.
- Effacement du cache des Fichiers Internet Temporaires ne fait rien. Le problème est dans la mémoire active, pas sur le disque.
La mémoire est effacé lorsque l'ensemble de l'application est fermé et redémarré.
Je suis prêt à écrire mon propre contrôle de navigateur dans la COM ou de l'API Windows directement, si c'est pour assurer solution au problème. Bien sûr, je préférerais un moins compliqué fixer; je préfère éviter d'aller jusqu'aux niveaux inférieurs de faire les choses, parce que je ne veux pas être de réinventer la roue en termes de prise en charge des fonctionnalités d'un navigateur. Letalone la duplication d'IE7 caractéristiques et les comportements non standard en rouleau-votre-propre navigateur de style.
De l'aide?