StreamReader.ReadLine(filepath)的替代方法,以避免内存不足? [重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

考虑以下:

using (var fs = new StreamReader(filepath))
{
    while (!fs.EndOfStream)
    {
        string line = fs.ReadLine();
    }
}

如果filepath是一个包含很长行字符的文件(换行符之间有很多字符),则可能导致服务器在其中一个ReadLine()调用上耗尽内存。这是一种潜在的拒绝服务向量。

是否有任何C#类可以缓解此问题?我正在创建一个继承StreamReader的新类,并使用StreamReader.ReadBlock()方法读取有限的字符块,但是我必须处理逐行解析才能返回文件中的行。我想使用一些Framework类来做同样的事情。

c# out-of-memory streamreader denial-of-service
1个回答
0
投票

你读取块,你只需要跟踪你在哪里

            char[] buffer = new char[24];

            while (!r.EndOfStream)
            {
                bytesRead = r.ReadBlock(buffer, 0, buffer.Length);
© www.soinside.com 2019 - 2024. All rights reserved.