【发布时间】:2011-02-03 01:30:28
【问题描述】:
抓取网页,包含大约 250 个表格分区。 使用 WatiN 和 WatinCSSSelectors
首先我选择所有属性为 'width=90%' 的 td 标签:
var allMainTDs = browser.CssSelectAll("td[width=\"90%\"]");
然后我创建一个 foreach 循环,将 var 的内容粘贴到一个列表中。 int 用于检查循环当前所在的 td 标签。
List<Element> eletd = new List<Element>();
int i = 0;
foreach (Element td in allMainTDs)
{
eletd.Add(td);
i++;
Console.WriteLine(i);
}
它很快就到达了第 250 个标签。但是接下来大约需要 6 分钟(使用 StopWatch 对象计时)才能进入下一条语句。这里发生了什么?
【问题讨论】:
-
@MHTn 什么是
next statement -
没关系,目前我有
int i = 0;,只是在那里放一个断点。问题是在 foreach 循环之后需要 AGES 才能到达下一行代码,在本例中为int i =0;。 -
CssSelectAll 返回的集合的枚举数的 Dispose 方法很可能会占用您的时间。你可以在分析器下运行它吗?
-
您是否尝试过在遇到延迟时中断以查看您在堆栈中的位置?听起来有些东西阻碍了第 250 个元素的枚举。
-
@Martinho Fernandes - 我刚刚下载了 ANTS profiler 试用版,但我不确定要看什么。目前,foreach 循环约占总时间成本的 84%。然而。我发现作为 CSSSelector 的一部分对 Watin 方法的调用似乎是这个耗时过程的最大份额......也许我会坚持使用良好的旧循环和 if 语句......@Justin Morgan - 我已经击中暂停,它只是以绿色突出显示 foreach 循环(特别是“in”字)。不知道这意味着什么。
标签: c# foreach watin enumeration