2015-03-15 3 views
-1

У меня есть приложение, которое читает файл и получает электронные письма из него. Я запускал свое приложение с помощью потоков, но мое приложение не улучшалось в производительности ... В чем моя проблема?Получить электронные письма из файла с помощью потоков

Использование потоков (занимает 54 сек):

StreamReader sr = new StreamReader(@"D:\15.txt"); 

Regex regx = new Regex(@"([\w\-\.]+)@((\[([0-9]{1,3}\.){3}[0-9]{1,3}\])|(([\w\-]+\.)+)([a-zA-Z]{2,4}))"); 
while (!sr.EndOfStream) 
{ 
    var line = sr.ReadLine(); 

    Thread th = new Thread(new ThreadStart(() => { 
     var mc = regx.Matches(line); 

     if (mc.Count != 0) 
      foreach (Match item in mc) 
      { 
       Console.WriteLine(item.Value); 
      } 
    })); 

    th.Start(); 
} 

Нормальный Код (занимает 54 сек):

StreamReader sr = new StreamReader(@"D:\15.txt"); 

Regex regx = new Regex(@"([\w\-\.]+)@((\[([0-9]{1,3}\.){3}[0-9]{1,3}\])|(([\w\-]+\.)+)([a-zA-Z]{2,4}))"); 
while (!sr.EndOfStream) 
{ 
    var line = sr.ReadLine(); 

    var mc = regx.Matches(line); 

    if (mc.Count != 0) 
     foreach (Match item in mc) 
     { 
      Console.WriteLine(item.Value); 
     } 
} 
+1

Ваше время, читающее файл с диска, затмевает время обработки регулярного выражения –

+1

Проблема в том, что вы связаны дисковым IO, а не вычислительными ресурсами. –

+0

, когда я удаляю коды регулярных выражений, файл чтения занимает 5 секунд .. Я думаю, что это не чтение диска. 'StreamReader sr = new StreamReader (@" D: \ 15.txt "); while (! Sr.EndOfStream) { \t var line = sr.ReadLine(); } ' –

ответ

0

Использование темы само по себе не делает ваше приложение быстрее. В этом случае в исходной ситуации у вас есть один поток, выполняющий всю работу. В следующей ситуации у вас есть первый поток, начинающий поток для выполнения работы. Но у вас все еще есть только одна обработка потока, и ваш начальный поток ожидает завершения обработки. Если вы хотите сделать это быстрее, вам нужно найти части, которые вы можете сделать параллельно.

+0

, когда я удаляю коды регулярных выражений, файл чтения занимает 5 секунд .. Я думаю, что это не чтение диска ..' StreamReader sr = new StreamReader (@ "D: \ 15.txt"); while (! Sr.EndOfStream) { \t var line = sr.ReadLine(); } ' –

0

Создание и запуск потока - дорогостоящая операция. Наличие одного для RegEx, вероятно, не экономически выгодно. Вызов RegEx - это дешево, чтобы гарантировать дополнительный поток для него.

Ваше считывание диска, вероятно, будет даже более дорогостоящим с точки зрения времени, затраченного на то, что любая польза, которая может нанести нить , может быть.

+0

Когда я удаляю коды регулярных выражений, файл чтения занимает 5 секунд .. Я думаю, что это не чтение диска ..' StreamReader sr = new StreamReader (@ "D: \ 15.txt"); while (! Sr.EndOfStream) { \t var line = sr.ReadLine(); } ' –

Смежные вопросы