我正在做一个从XML-RPC服务器获取一些数据的简单应用程序,我注意到HtmlUtilities.ConvertToText非常慢,这是在四核机器上需要900毫秒的测试:
[TestMethod]
public void TestHtmlToStringDogSlow()
{
string text = @"Zdjelice od dinje
Tartar od morskih delicija
Salata od ječma
Sirni namaz s avokadom
<p>Dosadili su vam uvijek isti namazi? Potpuno vas razumijemo i stoga nudimo namaz od avokada. Za one kojima treba više informacija, glavni su mu sastojci – uz avokado – pinjoli i svježi sir, a neodoljiv je uz prepečenac.</p>
Hladetina
<p>Popularno jelo s kolinja možete poslužiti i kao predjelo svečanog, pa i blagdanskog objeda ili večere, ali i kao samostalno malo jelo.</p>
Jaja u umaku od ajvara
<p>I kad vam nije do maštanja i velikih egzibicija, iz kuhinje možete iznijeti zanimljiva mala iznenađenja posve neočekivana okusa.</p>
Gurmanski zalogajčići
<p>Jelo – dosjetka ne vrednuje se ni brzinom pripreme ni brojem korištenih sastojaka, nego rezultatom. A ovi obogaćeni krekerčići zalogajčići su za bogove.</p>
Pikantni namaz od sira
<p>Dolaze vam gosti ili imate svježega kravljeg sira, a nemate ideju što biste s njime? Načinite vrlo zanimljiv i neuobičajen namaz, koji možete kratko sačuvati i u hladnjaku.</p>
Tuna <em>alla carpaccio</em>
<p>Iako je <em>carpaccio</em> izvorno od sirove zamrznute junetine odnosno govedine, priprema se od različitih namirnica. A pripremate li ga od ribe, ona osobito mora biti vrlo svježa.</p>
Namaz od svježeg sira i gorgonzole
<p>Gorgonzola i začinske trave i običnome sirnom namazu daju fini mediteranski štih. Uz pomno odabran kruh, pa s bademima i orasima, može se poslužiti i u svečanijim prilikama.</p>
Pašteta <em>Twist</em>
<p>Volite li paštete, i u njima možete uživati gurmanski. Idealno za veća okupljanja, za hladan bife.</p>
";
var convertedItems = new List<string>();
var items = text.Split(new string[] {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries);
foreach (string oneItem in items)
{
string cnv = HtmlUtilities.ConvertToText(oneItem);
//string cnv = oneItem.Replace("<p>", "").Replace("</p>", "");
convertedItems.Add(cnv);
}
}
我尝试评论ConvertToText行并执行简单的string.Replace,然后测试只需2 ms。我非常清楚,简单的替换非常与ConvertToText不同,只是为了把事情放在透视中。
所以我的问题是,在使用HtmlUtilities.ConvertToText时,是否有人遇到这种缓慢的问题?
答案 0 :(得分:1)
是的,我也见过这个。我有一个应用程序,可以从联合供稿中加载数据。当我使用这种方法时,性能绝对可怕。相反,我使用正则表达式来删除HTML标记。
答案 1 :(得分:0)
您应该使用WebUtility.HtmlDecode
代替HtmlUtilities.ConvertToText
。它更快,并且不会用空格替换空白字符。