Estoy tratando de leer algunos archivos de texto, donde cada línea debe ser procesada. En este momento solo estoy usando StreamReader, y luego leo cada línea individualmente.La lectura de un archivo línea por línea en C#
Me pregunto si hay una manera más eficiente (en términos de la Línea de Control y facilidad de lectura) para hacer esto utilizando LINQ sin comprometer la eficiencia operativa. Los ejemplos que he visto implican cargar todo el archivo en la memoria y luego procesarlo. En este caso, sin embargo, no creo que sea muy eficiente. En el primer ejemplo, los archivos pueden llegar hasta aproximadamente 50 mil, y en el segundo ejemplo, no todas las líneas del archivo que tenga que ser leído (tamaños son típicamente < 10k).
Se podría argumentar que hoy en día no tiene demasiada importancia para estos pequeños archivos, sin embargo, creo que el tipo de enfoque conduce a código ineficiente.
Primer ejemplo:
// Open file
using(var file = System.IO.File.OpenText(_LstFilename))
{
// Read file
while (!file.EndOfStream)
{
String line = file.ReadLine();
// Ignore empty lines
if (line.Length > 0)
{
// Create addon
T addon = new T();
addon.Load(line, _BaseDir);
// Add to collection
collection.Add(addon);
}
}
}
Segundo ejemplo:
// Open file
using (var file = System.IO.File.OpenText(datFile))
{
// Compile regexs
Regex nameRegex = new Regex("IDENTIFY (.*)");
while (!file.EndOfStream)
{
String line = file.ReadLine();
// Check name
Match m = nameRegex.Match(line);
if (m.Success)
{
_Name = m.Groups[1].Value;
// Remove me when other values are read
break;
}
}
}
50K no es aún lo suficientemente grande como para que sea en el montón de objetos grandes. La transmisión tiene sentido cuando tus archivos están en el rango de megabyte (o más grande), no en kilobytes. –