系统相关
首页 > 系统相关> > C# WebBrowser内存泄漏及在WPF和WinForms中的区别

C# WebBrowser内存泄漏及在WPF和WinForms中的区别

作者:互联网

一、WPF和WinForms的WebBrowser控件之间差异

winforms webbrowser暴露了更多的方法和属性.例如,wpf webbrowser中没有IsWebBrowserContextMenuEnabled,ActiveXInstance等.

关于winforms webbrowser的唯一缺点是组件内的按钮和滚动条与wpf本机控件的外观不一样.

二、WebBrowser内存泄漏

wpf的webbrowser坑太多了(js错误,无法获取newwindow事件...),所以不推荐使用它。

winform的webbrowser支持扩展,而且坑比较少,又有大量的资料,因此使用winform webbrowser是一个明智的选择。

参考文章:

1.WPF WebBrowser

https://blog.csdn.net/wodeshijianhrf/article/details/79907743

https://stackoverflow.com/questions/8302933/how-to-get-around-the-memory-leak-in-the-net-webbrowser-control

https://social.msdn.microsoft.com/Forums/en-US/368755dd-0047-4a88-9951-ba0539266410/wpf-webbrowser-is-not-disposed-properly?forum=wpf

2.WinForms WebBrowser

https://blog.csdn.net/wodeshijianhrf/article/details/90746142

https://stackoverflow.com/questions/2069314/memory-leak-when-using-wpf-webbrowser-control-in-multiple-windows

https://stackoverflow.com/questions/904478/how-to-fix-the-memory-leak-in-ie-webbrowser-control

https://blog.csdn.net/weixin_30631587/article/details/97205706

网上说法:

使用反射清除私有成员的方法

Dispose()调用-甚至在Web浏览器控件上调用Dispose()都不会释放资源

WinForms的WebBrowser与WPF中提供的控件相比,具有更好的功能和更好的性能。

尝试导航到about:blank,然后返回页面,IE控件占用的内存将被释放。

基本想法:“杀死自己,重启。”

使用WebBrowser.Dispose(bool)。使用方法:public class WebBrowserD : WebBrowser { internal void Dispose(bool disposing) { base.Dispose(disposing);} }

SetProcessWorkingSetSize(pi.hProcess,(SIZE_T)-1,(SIZE_T)-1))实际上并不释放任何内存,只是隐藏了内存,没有意义。

三、其他

win与ie的关系

https://blog.csdn.net/wodeshijianhrf/article/details/79969866?spm=1001.2014.3001.5502

标签:控件,C#,Dispose,WinForms,webbrowser,https,WebBrowser,wpf
来源: https://blog.csdn.net/dong123ohyes/article/details/117165085