WebBrowser BSTR的内存泄漏

时间:2013-08-06 21:29:48

标签: c# memory-leaks webbrowser-control

我正在使用webbrowser对象遇到某种泄漏;我仍在各地冲浪寻找答案 - 我也在这个论坛上看到过类似的问题,但我不知道如何在我的案例中应用这些调查结果。

页面加载后,会触发DocumentCompleted操作并解析页面上的HTML,

void PageScrollTimerTick(object sender, EventArgs e)
{
    String pageSrc = webBrowser1.Document.Body.InnerHtml;

    // Check if we need to stop scrolling..
    if (m_iLastFramePageLength == pageSrc.Length)
    {
        m_iLastFramePageLength = 0;
        m_scrollTimer.Tick -= PageScrollTimerTick
        m_scrollTimer.Enabled = false;

        parsePage();
        nextPage();
    }
    else
    {
        m_iLastFramePageLength = pageSrc.Length;
        webBrowser1.Document.Window.ScrollTo(0, webBrowser1.Document.Body.ScrollRectangle.Height);
    }
}

泄漏: CLR Profile

当我输入这个时,我想知道为什么这些功能?我有6个不同的功能,可以完成非常相似的任务。我认为这些都有问题,因为它们是从TIMER执行的,它可能使用不同的线程。我结束了吗?我该如何解决这个问题。也许是Web浏览器控件上的Invoke()?

doParse():

List<String> doSomeExtractions()
{
    List<String> retVal = new List<String>();
    foreach (HtmlElement div in webBrowser1.Document.GetElementsByTagName("div"))
    {
        String szClassName = div.GetAttribute("classname");
        switch (szClassName)
        {
            case "someDivClass":
                {
                    if (div.InnerHtml.Contains("<b>"))
                    {
                        retVal.Add(div.InnerHtml);
                    }
                    break;
                }
            default:
                {
                    break;
                }
        }

    }

    return retVal;
}

的MoveNext():

// Store data, navigate to next page.
webBrowser1.DocumentCompleted += this.scrapeData;
webBrowser1.Navigate("about:blank");

0 个答案:

没有答案