StreamReader.Readline () est-il vraiment la méthode la plus rapide pour compter les lignes dans un fichier?

Tout en regardant autour pendant un moment, j'ai trouvé pas mal de discussions sur la façon de déterminer le nombre de lignes dans un fichier.

Par exemple ces trois:
c# comment puis-je calculer le nombre de lignes dans un fichier texte
Déterminer le nombre de lignes dans un fichier texte
Comment calculer le nombre de lignes rapides?

Donc, je suis allé de l'avant et terminé à l'aide de ce qui semble être la plus efficace (à moins de mémoire?) la méthode que j'ai pu trouver:

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

Mais cela prend une éternité lorsque les lignes elles-mêmes à partir du fichier sont très longues. Est-il vraiment pas une solution plus rapide?

J'ai essayé d'utiliser StreamReader.Read() ou StreamReader.Peek() mais je ne peux pas (ou ne savent pas comment) faire l'un ou l'autre de passer à la ligne suivante dès qu'il y a des "trucs" (caractères? texte?).

Des idées s'il vous plaît?


CONCLUSION/RÉSULTATS (Après l'exécution de certains tests sur la base des réponses fournies):

J'ai testé les 5 méthodes ci-dessous sur deux fichiers différents et j'ai obtenu des résultats cohérents qui semblent indiquer que le bon vieux StreamReader.ReadLine() est encore l'un des moyens les plus rapides... Pour être honnête, je suis perplexe après tous les commentaires et discussion dans les réponses.

Fichier #1:
Taille: 3,631 KO
Lignes: 56,870

Des résultats en quelques secondes pour le Fichier n ° 1:
0.02 --> méthode ReadLine.
0.04 --> méthode de Lecture.
0.29 --> ReadByte méthode.
0.25 --> Readlines.Le comte de la méthode.
0.04 --> ReadWithBufferSize méthode.

Fichier n ° 2:
Taille: 14,499 KO
Lignes: 213,424

Des résultats en quelques secondes pour le Fichier n ° 1:
0.08 --> méthode ReadLine.
0.19 --> méthode de Lecture.
1.15 --> ReadByte méthode.
1.02 --> Readlines.Le comte de la méthode.
0.08 --> ReadWithBufferSize méthode.

Ici sont les 5 méthodes que j'ai testé basé sur tous les commentaires que j'ai reçu:

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;
}

source d'informationauteur sergeidave