Une comparaison des performances de l' File.ReadAllLines
vs StreamReader ReadLine
de C# à la manipulation de fichiers
Résultats. StreamReader est beaucoup plus rapide pour les gros fichiers avec+de 10 000
lignes, mais la différence pour les petits fichiers est négligeable. Comme toujours,
plan pour les différentes tailles de fichiers, et utiliser le Fichier.ReadAllLines uniquement lorsque
la performance n'est pas critique.
StreamReader approche
Comme l' File.ReadAllText
approche a été suggéré par d'autres, vous pouvez aussi essayer le plus rapide (je n'ai pas testé quantitativement l'impact sur les performances, mais il semble être plus rapide que l' File.ReadAllText
(voir la comparaison ci-dessous)). La différence de performances seront visibles uniquement en cas de plus gros fichiers.
string readContents;
using (StreamReader streamReader = new StreamReader(path, Encoding.UTF8))
{
readContents = streamReader.ReadToEnd();
}
Comparaison de Fichier.Readxxx() vs StreamReader.Readxxx()
Affichage de l'indicatif du code par le biais de ILSpy j'ai trouvé ce qui suit à propos de File.ReadAllLines
, File.ReadAllText
.
-
File.ReadAllText
- Utilise StreamReader.ReadToEnd
en interne
-
File.ReadAllLines
- Utilise également StreamReader.ReadLine
en interne, avec en outre la surcharge de la création de l' List<string>
de rendement que la lecture des lignes et la mise en boucle jusqu'à la fin du fichier.
Donc, les deux méthodes sont d'une couche supplémentaire de confort construit au sommet d' StreamReader
. Cela est évident par l'indicatif corps de la méthode.
File.ReadAllText()
la mise en œuvre de décompilation par ILSpy
public static string ReadAllText(string path)
{
if (path == null)
{
throw new ArgumentNullException("path");
}
if (path.Length == 0)
{
throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
}
return File.InternalReadAllText(path, Encoding.UTF8);
}
private static string InternalReadAllText(string path, Encoding encoding)
{
string result;
using (StreamReader streamReader = new StreamReader(path, encoding))
{
result = streamReader.ReadToEnd();
}
return result;
}