Sto cercando di leggere alcuni file di testo, in cui ogni riga deve essere elaborata. Al momento sto solo usando uno StreamReader e poi leggendo ogni riga individualmente.Lettura di un file riga per riga in C#
Mi chiedo se ci sia un modo più efficiente (in termini di LoC e leggibilità) per farlo utilizzando LINQ senza compromettere l'efficienza operativa. Gli esempi che ho visto implicano il caricamento dell'intero file in memoria e quindi l'elaborazione. In questo caso, tuttavia, non credo che sarebbe molto efficiente. Nel primo esempio i file possono arrivare a circa 50k e, nel secondo esempio, non è necessario leggere tutte le righe del file (le dimensioni sono in genere < 10k).
Si potrebbe obiettare che al giorno d'oggi non ha importanza per questi file di piccole dimensioni, tuttavia credo che una sorta di approccio porti a un codice inefficiente.
Primo esempio:
// 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);
}
}
}
Secondo esempio:
// 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;
}
}
}
50 K non è nemmeno abbastanza grande da essere inserito nell'heap di oggetti di grandi dimensioni. Lo streaming ha senso quando i file si trovano nell'intervallo di megabyte (o più grande), non in kilobyte. –