Как защитить от StreamReader.ReadLine (...), используя слишком много памяти? - PullRequest
0 голосов
/ 17 сентября 2018

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

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

...
const string filename = /*get filename*/
using (var sr = new StreamReader(filename))
{
  string line;
  while ((line = await sr.ReadLineAsync().ConfigureAwait(false)) != null)
  {
    //  process 'line'
  }
}
...

Но, глядя на (.NET 4.7.2) код для ReadLineAsync( ... ), также существует вероятность того, что рассматриваемая строка может исчерпать всю доступную память, (в случае большого файла без '\n' или '\r').

Прелесть ReadlineAsync(...) в том, что он заботится обо всей кодировке и т. д.

Итак, мой вопрос, как я могу безопасно прочитать строку до определенного количества символов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...