Используйте File Helpers API . Это .NET и с открытым исходным кодом. Это чрезвычайно высокая производительность при использовании скомпилированного кода IL для установки полей в строго типизированных объектах и поддержки потоковой передачи.
Он поддерживает все виды типов файлов и пользовательских разделителей; Я использовал его для чтения файлов размером более 4 ГБ.
Если по какой-то причине вам это не подходит, попробуйте читать строку за строкой со строкой. Split:
public IEnumerable<string[]> CreateEnumerable(StreamReader input)
{
string line;
while ((line = input.ReadLine()) != null)
{
yield return line.Split('þ');
}
}
Это даст вам простые строковые массивы, представляющие строки в потоковом режиме, в которые вы даже можете добавить Linq;) Помните, однако, что IEnumerable загружается с отложенной загрузкой, поэтому не закрывайте и не изменяйте StreamReader, пока не выполните итерацию или вызвал операцию полной загрузки, такую как ToList / ToArray или что-то подобное - учитывая ваш размер файла, я предполагаю, что вы этого не сделаете!).
Вот хороший пример использования:
using (StreamReader sr = new StreamReader("c:\\test.file"))
{
var qry = from l in CreateEnumerable(sr).Skip(1)
where l[3].Contains("something")
select new { Field1 = l[0], Field2 = l[1] };
foreach (var item in qry)
{
Console.WriteLine(item.Field1 + " , " + item.Field2);
}
}
Console.ReadLine();
Это пропустит строку заголовка, а затем распечатает первые два поля из файла, где четвертое поле содержит строку «что-то». Это будет сделано без загрузки всего файла в память.