c#Foreach memory webbrowser

时间:2017-02-23 01:37:00

标签: c# memory foreach

有人可以向我解释为什么当您转到webbrowser中的下一页时,此代码会产生如此多的内存使用量(例如,在3分钟内存超过300 MB后单击后退和前进)

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        foreach (HtmlElement input in webBrowser1.Document.GetElementsByTagName("input"))

        {

            if (input.GetAttribute("type").ToLower() == "text")
            {
                input.GotFocus += null;
                input.LostFocus += null;
            }


        }

在这种情况下如何释放内存?相反,我想添加此内容。

void GotFocusForm(object sender, EventArgs e)
    {
        Form2.Instance.Show();
    }
    void LostFocusForm(object sender, EventArgs e)
    {
        Form2.Instance.Hide();
    }

一周我正在寻找解决方案。非常感谢您的帮助。

经过几次反复前进。 Memory

1 个答案:

答案 0 :(得分:0)

每当您订阅该事件时,在完成工作后您需要取消订阅这些事件,否则将导致内存泄漏。最重要的是您需要取消订阅您订阅的每个活动。

private void webBrowser1_DocumentEventCleanup()
{
    foreach (HtmlElement input in webBrowser1.Document.GetElementsByTagName("input"))
    {
        if (input.GetAttribute("type").ToLower() == "text")
        {   //unsubscribe all the subscribe events
            input.GotFocus -= null;
            input.LostFocus -= null;
        }
    }
 }