Вложено около 10 функций, поэтому я просто вставлю соответствующие биты:
Эта строка действительно медленная:
var nodes = Filter_Chunk(Traverse(), chunks.First());
В частности, этот фрагмент внутри Filter_Chunk
(каламбур не предназначен):
private static IEnumerable<HtmlNode> Filter_Chunk(IEnumerable<HtmlNode> nodes, string selectorChunk)
{
// ...
string tagName = selectorChunk;
foreach (var node in nodes)
if (node.Name == tagName)
yield return node;
Там нет ничего слишком сложного ... так что я думаю, это должно быть просто число узлов в Traverse()
верно?
public IEnumerable<HtmlNode> Traverse()
{
foreach (var node in _context)
{
yield return node;
foreach (var child in Children().Traverse())
yield return child;
}
}
public SharpQuery Children()
{
return new SharpQuery(_context.SelectMany(n => n.ChildNodes).Where(n => n.NodeType == HtmlNodeType.Element), this);
}
Я попытался найти <h3>
узлов на stackoverflow.com .Там не должно быть более пары тысяч узлов, не так ли?Почему это занимает много минут?
На самом деле, где-то определенно есть ошибка, которая заставляет его возвращать больше узлов, чем следовало бы ... Я ответил на вопрос, к которому нужно обратитьсявыпуск