I am doing simple app that gets some data from XML-RPC server and I noticed that HtmlUtilities.ConvertToText is really slow, here is the test that takes 900 ms on quad core machine :
[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);
}
}
I tried commenting the ConvertToText line and doing simple string.Replace, and then test takes only 2 ms. I am very aware that simple replace is very different from ConvertToText but just to put things to perspective.
So my question is does anyone has experience this slowness when using HtmlUtilities.ConvertToText ?
Yes, I have seen this as well. I have an app that loads data from a syndication feed. When I use this method, performance is absolutely horrible. Instead, I used regex to strip out the HTML tags.