为什么StreamReader.ReadLine抛出OutOfMemoryException?

时间:2010-09-03 19:27:44

标签: .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();

1 个答案:

答案 0 :(得分:8)

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

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