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 ミリ秒でした。単純な置換は ConvertToText とは大きく異なることをよく知っていますが、物事を大局的に見るだけです。
私の質問は、 HtmlUtilities.ConvertToText を使用しているときにこの遅さを経験した人はいますか?