webbrowser控制与内存增加问题

我有一个程序,当它打开一个页面,它逐个导航url链接,它增加了内存使用量并继续增加.i发现在两三个小时之后它占据了我的内存的1和半gb打开一个hunderd页面我怎么能解决这个问题。

根据对同一问题的回答 ,内存在每个页面请求/加载时会增加,但会在一段时间内释放 – 这意味着它实际上不是内存泄漏。 尝试最小化应用程序窗口 – 然后释放内存?

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

// 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); 

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

我不了解WebBrowser控件的后台工作方式,但我意识到一件事:

我的程序会浏览500页或更多页面并在其上读取新内容。 它很快就占用了RAM,如果我再次运行所有这些页面的相同function,它只是从webbrowser缓存中读取,因此只需几秒即可完成。

这意味着我们只需要清除浏览器缓存以释放RAM。 对? 我找到了这个解决方案,但它不起作用。

http://support.microsoft.com/kb/326201/en-us

它总是给我PrtectedMemoryException …

好的,那么只有当我关闭我的应用程序时,内存是如何被释放的呢?当我处理我的webbrowser控件并创建一个新的时,它是不是被释放了?

RT _>它总是给我ProtectedMemoryException

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

returnValue = DeleteUrlCacheEntry(internetCacheEntry.lpszSourceUrlName);

使用internetCacheEntry.lpszLocalFileName