C# 内存增加问题的webbrowser控制

C# 内存增加问题的webbrowser控制,c#,C#,我有一个程序,当它打开一个页面时,一个接一个地浏览URL链接,这会增加内存使用并继续增加。我发现在两三个小时后,它占用了我1.5 gb的内存来打开一百个页面,我如何解决这个问题。根据,每次页面请求/加载时,内存都会增加,但将在一段时间内发布-这意味着它实际上不是内存泄漏。尝试最小化应用程序窗口-内存是否已释放 在这种情况下,您可以尝试通过以下代码定期修剪应用程序的工作集(摘自mike_t2e的答案): SetProcessWorkingSetSize实际上不会释放任何内存。 它确实增加了内存被分

我有一个程序,当它打开一个页面时,一个接一个地浏览URL链接,这会增加内存使用并继续增加。我发现在两三个小时后,它占用了我1.5 gb的内存来打开一百个页面,我如何解决这个问题。

根据,每次页面请求/加载时,内存都会增加,但将在一段时间内发布-这意味着它实际上不是内存泄漏。尝试最小化应用程序窗口-内存是否已释放

在这种情况下,您可以尝试通过以下代码定期修剪应用程序的工作集(摘自mike_t2e的答案):


SetProcessWorkingSetSize实际上不会释放任何内存。 它确实增加了内存被分页到磁盘的可能性, 并可能导致GC收集

我不了解WebBrowser控件的背景工作原理,但我意识到一件事:

我的程序会浏览500页或更多页,并阅读其中的新内容。它霸占了公羊 非常快,如果我再次运行相同的函数,它只需从webbrowser缓存中读取,因为它只需要几秒钟就可以完成

这意味着我们只需要清除浏览器缓存就可以释放RAM。对吗?我发现 这是一个解决方案,但它不起作用

它总是给我一个PrtectedMemoryException

好的,那么怎么可能只有在我关闭应用程序时才释放内存呢
当我处理我的webbrowser控件并创建新控件时,它没有被释放?

RT\u>它总是给我
ProtectedMemoryException

从项目属性->构建或替换将平台更改为
x86

returnValue=DeleteUrlCacheEntry(internetCacheEntry.lpszSourceUrlName)


使用internetCacheEntry.lpszLocalFileName

可以粘贴代码吗?这听起来像是你在节省一些资源,并发布了I Anders Fjeldstad,谢谢你的支持。你好,曼尼什,这真的不管用。我做了一个测试,检查这个线程:我不知道如何执行资源提供的代码。
// 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();

// ...

// Call this when you want to trim the working set
IntPtr pHandle = GetCurrentProcess();
SetProcessWorkingSetSize(pHandle, -1, -1);