1

我正在做一个从 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 时遇到过这种缓慢的情况?

4

2 回答 2

1

是的,我也看到了这个。我有一个从联合提要加载数据的应用程序。当我使用这种方法时,性能绝对是可怕的。相反,我使用正则表达式去除 HTML 标签。

于 2012-10-04T20:01:59.653 回答
0

您应该使用WebUtility.HtmlDecode而不是HtmlUtilities.ConvertToText. 它要快得多,并且不会用空格替换空白字符。

于 2013-08-26T18:04:21.567 回答