我的应用逐行“读取”文本文件,并在需要时处理数据。 我一次读一行的原因是,尽管大多数文件都很小,但实际上有些却很大。
因此,我没有逐行读取文件,而是将所有内容读入单个字符串并可能耗尽内存。
...
const string filename = /*get filename*/
using (var sr = new StreamReader(filename))
{
string line;
while ((line = await sr.ReadLineAsync().ConfigureAwait(false)) != null)
{
// process 'line'
}
}
...
但是,查看ReadLineAsync( ... )
的(.NET 4.7.2)代码,还有可能所讨论的行耗尽了所有可用的内存(对于大文件而没有'\n'
或'\r'
。
ReadlineAsync(...)
的美丽之处在于它可以处理所有的编码等等。
所以我的问题是,如何安全地读取最多一定数量的字符的行?