2012-01-07 112 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