gpt4 book ai didi

c# - 如何修复 IE WebBrowser 控件中的内存泄漏?

转载 作者:IT王子 更新时间:2023-10-29 04:13:00 29 4
gpt4 key购买 nike

我正在尝试在 C# Winform 应用程序中嵌入 WebBrowser 控件。这听起来很容易。但是,我发现每次调用 Navigate 方法时,WebBrowser 控件都会占用大量内存。内存永远不会释放。内存使用量越来越大……

网上有很多人遇到了完全相同的问题,但我还没有找到满意的答案。这是迄今为止我发现的关于这个问题的最佳讨论:

Memory Leak in IE WebBrowser Control

有人建议升级到 IE8 来解决这个问题。

但是,无论用户是否安装了最新的 IE 版本,我都需要一个解决方案。我无法控制用户环境。

有人知道如何释放 WebBrowser 控件占用的内存吗?有解决方法吗? WebBrowser 控件是否有替代品?

更新:我只是做了几个测试。在工作中,我正在运行 Windows XP 和 IE6。内存没有在那里增长。调用 navigate 方法时内存会增加,但会在一段时间后释放。在家里,我正在运行 Vista 并升级到 IE8。在这里我也看不到问题了。看起来这个问题是特定于 IE7 的。因此,问题应该改写为“安装 IE7 时如何修复 IE WebBrowser 控件中的内存泄漏”。谁能确认这个问题是 IE7 特有的?

最佳答案

我的应用程序在导航时也不断消耗内存,并且不再释放。我在这里找到了解决方案: http://social.msdn.microsoft.com/Forums/en-US/ieextensiondevelopment/thread/88c21427-e765-46e8-833d-6021ef79e0c8

为了完整起见,我贴出值得注意的摘录:

-- in class definition

[DllImport("KERNEL32.DLL", EntryPoint = "SetProcessWorkingSetSize", SetLastError = true, CallingConvention = CallingConvention.StdCall)]
internal static extern bool SetProcessWorkingSetSize(IntPtr pProcess, int dwMinimumWorkingSetSize, int dwMaximumWorkingSetSize);

[DllImport("KERNEL32.DLL", EntryPoint = "GetCurrentProcess", SetLastError = true, CallingConvention = CallingConvention.StdCall)]
internal static extern IntPtr GetCurrentProcess();

-- 减少内存时调用的代码

        IntPtr pHandle = GetCurrentProcess();
SetProcessWorkingSetSize(pHandle, -1, -1);

所有荣誉: http://social.msdn.microsoft.com/profile/mike_t2e/?type=forum&referrer=http://social.msdn.microsoft.com/Forums/en-US/ieextensiondevelopment/thread/88c21427-e765-46e8-833d-6021ef79e0c8用于发布解决方案。

http://ict-engineer.blogspot.com/2010/10/net-webbrowser-control-memory-leak.html为了 SEO 正确,所以我可以找到它 ;)

问候

编辑:如果这可以帮助您快速解决问题 - 很好。但是你应该覆盖你的应用程序设计,你使用的模式(如果有的话),重构这个东西,如果你构建的时间更长......

关于c# - 如何修复 IE WebBrowser 控件中的内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/904478/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com