Не устраивает скорость работы Regex - C#

Узнай цену своей работы

Формулировка задачи:

Задача: разобрать файл с текстом на слова и числа для последующей их индексации. Исполнение: считываем файл построчно, разбирая строки на слова и числа с помощью регулярного выражения (Regex), обработка результатов. Проблема: низкая скорость работы. Тестовый файл ~20 Мб. разбирается пару-тройку часов, а требуется обработка файлов размером от 100 Мб. p.s. аналогичные действия (индексация файлов) некая программа на "калькуляторах" выполняет в считанные секунды (с тестовым файлом). p.s.s. пробовал на делфи разбить задачу на потоки (по потоку на каждый символ, с которого может начинаться слово), все равно - долго (минуты, десятки минут), да и при том садит проц на 80% (конфигурация компьютера, на котором программа будет работать в 4 раза, если так можно выразится, хуже). Буду признателен любой помощи, с Уважением!

Решение задачи: «Не устраивает скорость работы Regex»

textual
Листинг программы
        var path = ...;
        foreach(var word in GetWords(File.ReadAllLines(path)))
        {
            //...
        }
 
...
 
        static IEnumerable<string> GetWords(IEnumerable<string> lines)
        {
            var sb = new StringBuilder();
            foreach(var line in lines)
            {
                sb.Length = 0;
                foreach(var c in line)
                {
                    if (char.IsLetterOrDigit(c))
                        sb.Append(c);
                    else
                        if(sb.Length > 0)
                        {
                            yield return sb.ToString();
                            sb.Length = 0;
                        }
                }
 
                if(sb.Length > 0)
                    yield return sb.ToString();
            }
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5