How to Fix the Memory Leak in IE WebBrowser Control?

后端 未结 18 947
走了就别回头了
走了就别回头了 2020-11-27 05:33

I am trying to embed a WebBrowser Control in a C# Winform Application. This sounds easy enough. However I discovered that the WebBrowser control eats up a lot of memory ever

18条回答
  •  盖世英雄少女心
    2020-11-27 05:55

    This worked for meand my app no longer climbs to 500MB ram usage anymore, it stays at 60MB forever. The trick is to set the webbrowser to null after disposing it, and before calling GC.

    my program repeatedly goes to the same site, 3 different pages, only once per use, not crawling large numbers of pages or anything.

    string eventBuffer;
    
    void GetContracts_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                var web = sender as WebBrowser;
                if (web.Url == e.Url)
                {
                    TaskMaster.Get_Contracts(ref web);
                    if(Memory.Contracts.Count==0)
                    {
                        eventBuffer="UpdateContractFailed";
                        web.Disposed += new EventHandler(web_Disposed);
                        web.Dispose();
                        return;
                    }
                    eventBuffer="UpdateContractList";
                    web.Disposed += new EventHandler(web_Disposed);
                    web.Dispose();
                }
            }
    
    private void web_Disposed(object sender, EventArgs e)
            {
                WebBrowser web = (WebBrowser)sender;
                FireEvent(eventBuffer);
                **web = null;**
                GC.Collect();
                thread.Abort();
            }
    

提交回复
热议问题