2012-01-07 127 views
0

我正在運行代碼,從一百萬個文檔中使用正則表達式提取超鏈接,一開始,代碼運行速度非常快(大約每秒200個文檔),但後來變得非常快速度慢,慢到每秒10個文檔,有沒有人經歷過這個?代碼如下。LINQ循環在一段時間後變得越來越慢

class Program 
    { 
     static void Main(string[] args) 
     { 
      ExtractHyperLinks(); 

     } 

     private static void ExtractHyperLinks() 
     { 
      DataContext dc = new DataContext(); 

      var docs = from p in dc.docs 
         select p; 

      Regex reUrl = new Regex(@"((https?):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)"); 

      int counter = 0; 

      foreach (Document d in docs) 
      {     
       Match m = reUrl.Match(tweet.Text); 
       if (m.Success) 
       { 
        Hyperlink h = new Hyperlink(); 
        h.Url = m.Value; 
        dc.Hyperlinks.InsertOnSubmit(h); 
        dc.SubmitChanges(); 
        Console.WriteLine(h.Url); 
       } 
       counter++; 
      } 
     } 
    } 
+1

嘗試'新的正則表達式(...,RegexOptions.Compiled)'。 – 2012-01-07 12:36:15

+1

Console.WriteLine不是一個非常快速的調用 – Joe 2012-01-07 12:38:09

+1

您也可以嘗試在循環外部移動SubmitChanges,可能會提高性能。 – Magnus 2012-01-07 12:46:49

回答

0

嘗試將foreach循環更改爲a = 0到numOfDocs,然後通過docs [i]獲取。另外,什麼是反對?

+0

這將如何幫助? – Magnus 2012-02-01 22:23:17