为什么StreamReader.ReadLine抛出OutOfMemoryException?

谁能告诉我为什么这里的最后一行会引发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税)。

链接地址: http://www.djcxy.com/p/29271.html

上一篇: Why does StreamReader.ReadLine throw OutOfMemoryException?

下一篇: Maximum array size in MATLAB?