谁能告诉我为什么最后 这里的行抛出 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/