解决webBrowser占用内存过高的问题

最近没怎么更新博客了,一直在开发一款WinForm程序。在开发过程中使用到了webBrowser控件,发现在长期运行后占用的内存会越来越高,最后直接导致程序异常崩溃,今天写个博客记录一下我的解决方法。

解决思路:每次用完 webBrowser 后调用 Dispose();销毁 webBrowser ,然后再进行当前程序的内存释放,经过实际测试可以达到接近完美的效果。

代码如下:

        private void button1_Click(object sender, EventArgs e)
        {

             webBrowser1 = new WebBrowser();
             webBrowser1.ScriptErrorsSuppressed = true;
             webBrowser1.Navigate(string.Format("https://www.networkcabin.com/"));

             //处理业务逻辑
             //........

             //释放调用资源
             webBrowser1.Dispose();
             //释放调用内存
             IntPtr pHandle = GetCurrentProcess();
             SetProcessWorkingSetSize(pHandle, -1, -1);

        }

        /// <summary>
        /// 清理内存
        /// </summary>
        /// <param name="pProcess"></param>
        /// <param name="dwMinimumWorkingSetSize"></param>
        /// <param name="dwMaximumWorkingSetSize"></param>
        /// <returns></returns>
        [DllImport("KERNEL32.DLL", EntryPoint = "SetProcessWorkingSetSize", SetLastError = true, CallingConvention = CallingConvention.StdCall)]
        internal static extern bool SetProcessWorkingSetSize(IntPtr pProcess, int dwMinimumWorkingSetSize, int dwMaximumWorkingSetSize);

        /// <summary>
        /// 清理内存
        /// </summary>
        /// <returns></returns>
        [DllImport("KERNEL32.DLL", EntryPoint = "GetCurrentProcess", SetLastError = true, CallingConvention = CallingConvention.StdCall)]
        internal static extern IntPtr GetCurrentProcess();

我调用的webBrowser被我隐藏了,虽然界面上看不到。这样处理完成之后就会发现内存占用在处理完业务逻辑之后就会完全释放,最终能实现降内存的效果。

THE END