为什么StreamReader.ReadLine抛出OutOfMemoryException?

skb*_*skb 7 .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();
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 8

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

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