想象以下代碼:爲什麼此代碼執行速度比其他代碼快89%以查找HTML元素?有什麼不同?
var htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.OptionAutoCloseOnEnd = false;
htmlDoc.OptionCheckSyntax = false;
htmlDoc.OptionFixNestedTags = false;
htmlDoc.OptionOutputOptimizeAttributeValues = false;
htmlDoc.LoadHtml(html); /*Where html is a string of 5MB size.*/
/*First approach to select all "anchor" elements*/
HtmlNodeCollection coll = htmlDoc.DocumentNode.SelectNodes("//*/a");
if (coll != null && coll.Count > 0)
ReplaceSourceLinks(coll, "href");
上面的代碼應該加載〜5MB HTML字符串和替換與適合於在App東西HTML中找到的所有那些9567個錨HREF。上面的代碼需要1998ms執行。
所以我決定更換而不是使用XPath來解決這些美女主播與下面的代碼上面顯示的最後3條線,也即,我決定用下面的代碼:
IEnumerable<HtmlNode> coll = htmlDoc.DocumentNode.Descendants("a");
if (coll != null)
ReplaceSourceLinks(coll, "href");
新方法利用只有220ms執行!比第一種方法快了近89%。我只想知道這些代碼是否相同。他們是否處理同一組錨? (順便說一句,第二個也選擇了相同的9567個元素)。爲什麼第二種方法執行速度快89%?
謝謝。
您是否清除了兩次測試之間的緩存? – Steve
當然可以。 –