【发布时间】:2013-12-29 21:21:33
【问题描述】:
我在 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 有漏洞吗?
-
是的。我正在监视我的应用程序正在使用的物理内存。并且正在增长和增长(不快但仍然)。我的应用只是一个浏览大量页面的网络浏览器。
-
阻止您使用此解决方案的确切问题是什么?
-
可能重复 How to get around the memory leak in the .NET Webbrowser control?。阅读 Sergey Kostrukov 的回答。
标签: c# internet-explorer memory-leaks browser