我有webBrowser控件中的内存泄漏问题。 我发现这个线程:WebBrowser控制内存泄漏
How to get around the memory leak in the .NET Webbrowser control?
这:
//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);
}
}
}
但我使用Windows.Forms的无WPF窗口,我有这个代码转换为我的需求问题。有人能帮助我吗?
你确定的WinForms有泄漏呢? – SLaks
是的。我正在监视我的应用正在使用的物理内存。并且正在增长和增长(并不快但仍然)。我的应用程序只是一个web浏览器导航到大量的页面。 – Yozer
确切的问题是什么妨碍您使用此解决方案? – nestedloop