Есть ли быстрый способ разобрать большой файл с помощью регулярных выражений?

Проблема: очень, очень большой файл мне нужно анализировать построчно, чтобы получить 3 значения из каждой строки. Все работает, но анализ файла занимает много времени. Возможно ли сделать это за считанные секунды? Типичное время его приема составляет от 1 минуты до 2 минут.

Размер файла примера составляет 148 208 КБ

Я использую регулярное выражение для анализа каждой строки:

Вот мой код C #:

private static void ReadTheLines(int max, Responder rp, string inputFile)
{
    List<int> rate = new List<int>();
    double counter = 1;
    try
    {
        using (var sr = new StreamReader(inputFile, Encoding.UTF8, true, 1024))
        {
            string line;
            Console.WriteLine("Reading....");
            while ((line = sr.ReadLine()) != null)
            {
                if (counter <= max)
                {
                    counter++;
                    rate = rp.GetRateLine(line);
                }
                else if (max == 0)
                {
                    counter++;
                    rate = rp.GetRateLine(line);
                }
            }
            rp.GetRate(rate);
            Console.ReadLine();
        }
    }
    catch (Exception e)
    {
        Console.WriteLine("The file could not be read:");
        Console.WriteLine(e.Message);
    }
}

Вот мое регулярное выражение:

public List<int> GetRateLine(string justALine)
{
    const string reg = @"^\d{1,}.+\[(.*)\s[\-]\d{1,}].+GET.*HTTP.*\d{3}[\s](\d{1,})[\s](\d{1,})$";
    Match match = Regex.Match(justALine, reg,
                                RegexOptions.IgnoreCase);

    // Here we check the Match instance.
    if (match.Success)
    {
        // Finally, we get the Group value and display it.

        string theRate = match.Groups[3].Value;
        Ratestorage.Add(Convert.ToInt32(theRate));
    }
    else
    {
        Ratestorage.Add(0);
    }
    return Ratestorage;
}

Вот пример строки для анализа, обычно около 200 000 строк:

10.10.10.10 - - [27 / Nov / 2002: 16: 46: 20 -0500] "GET / solr / HTTP / 1.1" 200 4926 789

Ответы на вопрос(4)

Ваш ответ на вопрос