2016-12-09 2 views
1

У меня возникла проблема чтения одиночной формы большого файла, закодированного в UTF-8. Строки в файле имеют постоянную длину.Как читать определенную строку из большого файла?

Файл в среднем имеет 300 тыс. Строк. Время является основным ограничением, поэтому я хочу сделать это как можно быстрее.

Я попытался LinQ

File.ReadLines("file.txt").Skip(noOfLines).Take(1).First(); 

Но время не достаточно удовлетворительным.

Моя самая большая надежда заключалась в использовании потока и установлении его возможности для желаемого запуска линии, но проблема в том, что размеры строк в байтах различаются.

Любые идеи, как это сделать?

+0

Если каждая строка имеет фиксированную длину, вы можете просто вычислить смещение и читать оттуда доступа к l ine с FileStream, например. http://stackoverflow.com/a/8678918/246342 –

+0

@AlexK .: «используя поток и установив его доступ к желаемому началу строки, но проблема в том, что размеры строк в байтах отличаются« –

+0

. Вы можете упростить свой запрос : 'File.ReadLines (« file.txt »). ElementAtOrDefault (noOfLines + 1)' –

ответ

1

Теперь это, где вы не хотите использовать LINQ (-:. Вы на самом деле хотите найти п-й появление новой строки в файле и читать что-то до следующей новой линии

Вы, вероятно, хотите, чтобы проверить эту документацию на файлы, отображенные на память, а также: https://msdn.microsoft.com/en-us/library/system.io.memorymappedfiles.memorymappedfile(v=vs.110).aspx

существует также после сравнения различных методов http://cc.davelozinski.com/c-sharp/fastest-way-to-read-text-files

Смежные вопросы