Вы действительно хотите перечислить исходный файл и обрабатывать каждую строку одновременно. Я использую следующее
public static IEnumerable<string> EnumerateLines(this FileInfo file)
{
using (var stream = File.Open(file.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var reader = new StreamReader(stream))
{
string line;
while ((line = reader.ReadLine()) != null)
{
yield return line;
}
}
}
Затем для каждой строки вы можете разделить ее, используя вкладки, и обрабатывать каждую строку по очереди. Это сохраняет память очень низкой для синтаксического анализа, вы используете память только тогда, когда это требуется приложению.