大量使用Watin,IE保持开放的问题

时间:2010-03-04 12:33:15

标签: c# asp.net watin

我在C#console应用程序中使用Watin来抓取网站,同时运行五个控制台应用程序。 我部分使用Watin作为爬虫的原因是因为一些网站使用javascript(或ajax)来设置页面内容。

以下是获取页面评论计数的示例代码:

        Settings.Instance.MakeNewIeInstanceVisible = false;
        using (var browser = new IE(commentLink, true))
        {
            browser.Link(Find.ByUrl(commentLink)).WaitUntilExists(20);

            Span commentSpan = browser.Span("COUNT_TOTAL");

            if (commentSpan.Exists)
            {
                int commentCount;
                if (Int32.TryParse(commentSpan.InnerHtml, out commentCount))
                {
                    return commentCount;
                }
            }
        }

我的问题是在运行这5个控制台应用程序一段时间后(90分钟),很多IE实例保持打开(因为超时或错误或IE忙),所以系统很慢,需要重新启动

如何更改代码以防止此事发生并使我的应用程序保持高效?

1 个答案:

答案 0 :(得分:7)

我认为,在您的示例代码中,只有一个时刻,IE不会关闭。由于你在using内,即使发生using内的异常,也会处理浏览器,所以一切都很好。

但是在创建浏览器的那一刻:

new IE(commentLink, true)

你不在using内,并且没有魔法try...catch。 试试这个,让我知道它是否有帮助:

Settings.Instance.MakeNewIeInstanceVisible = false;
using (var browser = new IE(true))
{
    browser.GoTo(commentLink);

    browser.Link(Find.ByUrl(commentLink)).WaitUntilExists(20);

    Span commentSpan = browser.Span("COUNT_TOTAL");

    if (commentSpan.Exists)
    {
        int commentCount;
        if (Int32.TryParse(commentSpan.InnerHtml, out commentCount))
        {
            return commentCount;
        }
    }
}