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 窗口,并且在将此代码转换为我的需要时遇到问题。有人可以帮助我吗?
我们在几个应用程序中使用了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)