StreamReader.Readline () é realmente o método mais rápido para contar linhas em um arquivo?

Enquanto procurava por um tempo, encontrei algumas discussões sobre como descobrir o número de linhas em um arquivo.

Por exemplo, esses três:
c # como faço para contar linhas em um arquivo de texto
Determinar o número de linhas dentro de um arquivo de texto
Como contar as linhas rapidamente?

Então, fui em frente e acabei usando o que parece ser o método mais eficiente (pelo menos no que diz respeito à memória?) Que pude encontrar:

private static int countFileLines(string filePath)
{
    using (StreamReader r = new StreamReader(filePath))
    {
        int i = 0;
        while (r.ReadLine() != null) 
        { 
            i++; 
        }
        return i;
    }
}

Mas isso leva uma eternidade quando as próprias linhas do arquivo são muito longas. Existe realmente não uma solução mais rápida para isso?

Eu tenho tentado usarStreamReader.Read() ouStreamReader.Peek() mas eu não posso (ou não sei como) fazer qualquer um deles passar para a próxima linha assim que houver 'coisas' (chars? text?).

Alguma idéia por favor?

CONCLUSÃO / RESULTADOS (Depois de executar alguns testes com base nas respostas fornecidas):

Eu testei os 5 métodos abaixo em dois arquivos diferentes e obtive resultados consistentes que parecem indicar queStreamReader.ReadLine() ainda é uma das formas mais rápidas ... Para ser honesto, fico perplexo depois de todos os comentários e discussões nas respostas.

Arquivo nº 1:
Tamanho: 3,631 KB
Linhas: 56.870

Resultados em segundos para o arquivo nº 1:
0,02 -> método ReadLine.
0,04 -> método de leitura.
0,29 -> método ReadByte.
0,25 -> método Readlines.Count.
0,04 -> método ReadWithBufferSize.

Arquivo nº 2:
Tamanho: 14,499 KB
Linhas: 213,424

Resultados em segundos para o arquivo nº 1:
0,08 -> método ReadLine.
0,19 -> método de leitura.
1.15 -> método ReadByte.
1.02 -> método Readlines.Count.
0.08 -> método ReadWithBufferSize.

Aqui estão os 5 métodos que testei com base em todos os comentários que recebi:

private static int countWithReadLine(string filePath)
{
    using (StreamReader r = new StreamReader(filePath))
    {
    int i = 0;
    while (r.ReadLine() != null)
    {
        i++;
    }
    return i;
    }
}

private static int countWithRead(string filePath)
{
    using (StreamReader _reader = new StreamReader(filePath))
    {
    int c = 0, count = 0;
    while ((c = _reader.Read()) != -1)
    {
        if (c == 10)
        {
        count++;
        }
    }
    return count;
    }            
}

private static int countWithReadByte(string filePath)
{
    using (Stream s = new FileStream(filePath, FileMode.Open))
    {
    int i = 0;
    int b;

    b = s.ReadByte();
    while (b >= 0)
    {
        if (b == 10)
        {
        i++;
        }
        b = s.ReadByte();
    }
    return i;
    }
}

private static int countWithReadLinesCount(string filePath)
{
    return File.ReadLines(filePath).Count();
}

private static int countWithReadAndBufferSize(string filePath)
{
    int bufferSize = 512;

    using (Stream s = new FileStream(filePath, FileMode.Open))
    {
    int i = 0;
    byte[] b = new byte[bufferSize];
    int n = 0;

    n = s.Read(b, 0, bufferSize);
    while (n > 0)
    {
        i += countByteLines(b, n);
        n = s.Read(b, 0, bufferSize);
    }
    return i;
    }
}

private static int countByteLines(byte[] b, int n)
{
    int i = 0;
    for (int j = 0; j < n; j++)
    {
    if (b[j] == 10)
    {
        i++;
    }
    }

    return i;
}

questionAnswers(7)

yourAnswerToTheQuestion