.net - 为什么 StreamReader.ReadLine 会抛出 OutOfMemoryException?

标签 .net out-of-memory

谁能告诉我为什么最后 这里的行抛出 OOM 异常?

        byte[] buffer = new byte[1];
        buffer[0] = 239;
        MemoryStream ms = new MemoryStream(buffer);
        StreamReader sr = new StreamReader(ms);
        string l1 = sr.ReadLine();
        string l2 = sr.ReadLine();

最佳答案

恭喜,您在 .NET 框架中发现了一个错误。它由字节值(十六进制的 0xef)引起。这是UTF-8 BOM的第一个字节.它当然不是完整的 BOM,缺少接下来的两个字节。然而,它足以让 StreamReader 致命地混淆,它不断尝试从流中读取数据而没有到达任何地方,在尝试时消耗内存。 OOM 最终是下一个。

.NET 4.0 中也存在此错误。错误的确切来源很难追踪,所涉及的代码未包含在引用源中。它可能被归类为关键的,因为它可以用于 DOS 攻击。您可以在 connect.microsoft.com 报告错误。如果您不想,请告诉我,我会报告(MVP 职责)。

关于.net - 为什么 StreamReader.ReadLine 会抛出 OutOfMemoryException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3638941/

相关文章:

c# - c#中的子字符串并逐一添加

c# - List<string> 内存不足异常

c# - 使用空属性 setter 时引发 Visual Studio 警告

c# - 如何中止线程

c# - 在更新 WinForms 中的控件(例如 DataGridView)时闪烁

java - 构建 Apache FOP 时系统资源不足

java - Rapidminer - 处理大型数据集时内存不足

asp.net - 在 IIS 上休息

apache-spark - Spark : out of memory when broadcasting objects

python - 在 Google App Engine 中部署应用程序时出现内存错误