【问题标题】:Alternative to StreamReader.ReadLine(filepath) to avoid running out of memory? [duplicate]替代 StreamReader.ReadLine(filepath) 以避免内存不足? [复制]
【发布时间】:2019-03-14 10:28:03
【问题描述】:

考虑以下几点:

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

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

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

【问题讨论】:

  • 1.真正的问题应该出在其他地方(使用这些行的地方)。 2.尝试移动for循环的字符串行out的类型定义。
  • 这样一行你想做什么?抛出异常,分块读取,截断?
  • 典型的文件大小是多少?
  • 问题取决于行长和内存大小。

标签: c# out-of-memory streamreader denial-of-service


【解决方案1】:

你的车阅读块,你只需要跟踪你在哪里

            char[] buffer = new char[24];

            while (!r.EndOfStream)
            {
                bytesRead = r.ReadBlock(buffer, 0, buffer.Length);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 2013-10-04
    • 2020-03-26
    • 1970-01-01
    相关资源
    最近更新 更多