У меня есть файл больше 10G.Чтобы читать этот файл построчно, я написал эту функцию.
static IEnumerable<string> fread(string fname, Encoding enc)
using (var f = File.OpenRead(fname))
using (var reader = new StreamReader(f, enc))
while (!reader.EndOfStream)
yield return reader.ReadLine();
}
Этот код работает довольно хорошо, но он возвращает строковую строку, а не строковый байт [].Поэтому, чтобы вернуть byte [] для каждой строки, я написал другую функцию.
static IEnumerable<byte[]> freadbytes(string fname) {
using (var f = File.OpenRead(fname)) {
var bufSz = 1024;
var buf = new byte[bufSz];
var read = 1;
var cr = (byte)13; // \r
var lf = (byte)10; // \n
var data = new List<byte>();
while (read > 0) {
read = f.Read(buf, 0, bufSz);
data.AddRange(read == bufSz ? buf : buf.slc(0, read));
var i = data.IndexOf(lf);
while (i >= 0) {
if (i > 0 && data[i - 1] == cr) yield return data.Take(i - 1).ToArray();
else yield return data.Take(i).ToArray();
data.RemoveRange(0, i + 1);
i = data.IndexOf(lf);
}
}
}
}
Вторая функция, freadbytes (), также работает хорошо, но проблема в том, что вторая функция занимает более 10 разпервая функция.Что я могу сделать для второй функции быстрее?