Web浏览器控制内存泄漏

Yoz*_*zer 5 c# browser internet-explorer memory-leaks

我在 webBrowser 控件中遇到内存泄漏问题。我找到了这个线程:

如何解决 .NET Webbrowser 控件中的内存泄漏问题?

和这个:

//dispose to clear most of the references
this.webbrowser.Dispose();
BindingOperations.ClearAllBindings(this.webbrowser);

//using reflection to remove one reference that was not removed with the dispose 
var field = typeof(System.Windows.Window).GetField("_swh", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);

var valueSwh = field.GetValue(mainwindow);

var valueSourceWindow = valueSwh.GetType().GetField("_sourceWindow", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(valueSwh);

var valuekeyboardInput = valueSourceWindow.GetType().GetField("_keyboardInputSinkChildren", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(valueSourceWindow);

System.Collections.IList ilist = valuekeyboardInput as System.Collections.IList;

lock(ilist)
{
    for (int i = ilist.Count-1; i >= 0; i--)
    {
        var entry = ilist[i];
        var sinkObject = entry.GetType().GetField("_sink", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
        if (object.ReferenceEquals(sinkObject.GetValue(entry), this.webbrowser.webBrowser))
        {
            ilist.Remove(entry);
        }
    }
} 
Run Code Online (Sandbox Code Playgroud)

但我使用的是 Windows.Forms,没有 WPF 窗口,并且在将此代码转换为我的需要时遇到问题。有人可以帮助我吗?

Cap*_*Bli 3

我们在几个应用程序中使用了Chromium 。这使我们能够在 WinXP 中运行 HTML 5。由于该webBrowser控件使用操作系统已安装的 IE,因此您无法使用大多数更好的 HTML/Javascript。Microsoft 不支持 WinXP 的 IE,因此该应用程序只能访问旧版本的 IE。

如果您使用Chromium 的CEFSharp版本,您甚至可以编译更多的 mods 和导航辅助工具,从而改进 IE 不支持的嵌入式通信。

代码非常简单,有几个例子,只要看一下:

InitializeComponent();
Text = "CefSharp";

web_view = new WebView("https://github.com/perlun/CefSharp", new BrowserSettings());
web_view.Dock = DockStyle.Fill;
toolStripContainer.ContentPanel.Controls.Add(web_view);
//even setup the console to log to a Textbox for debugging by setting up a Handler.
web_view.ConsoleMessage += new CefSharp.ConsoleMessageEventHandler(ConsoleMessageHandler);
Run Code Online (Sandbox Code Playgroud)