StreamReader.ReadLine抛出一个奇怪的ArgumentOutOfRangeException

时间:2013-03-05 10:40:49

标签: c# .net streamreader

我在大型文本文件(~300 MB)上使用StreamReader并在循环中调用ReadLine()最终会引发一个奇怪的ArgumentOutOfRangeException

Index and count must refer to a location within the buffer.
Parameter name: bytes

堆栈跟踪是:

at System.Text.DecoderNLS.GetChars(Byte[] bytes, Int32 byteIndex, Int32 byteCount,
Char[] chars, Int32 charIndex, Boolean flush)
at System.Text.DecoderNLS.GetChars(Byte[] bytes, Int32 byteIndex, Int32 byteCount,
Char[] chars, Int32 charIndex)
at System.IO.StreamReader.ReadBuffer()
at System.IO.StreamReader.ReadLine()
....

这是一些奇怪的内存错误吗?它没有抛出OutOfMemoryException所以我有点迷失了。 它发生在第2000行左右。到那时,即使它继续成功的ReadLine(),它也开始在其他地方抛出奇怪的异常。所以某处可能存在内存泄漏,但有哪些内容可以查看ReadLine()StreamReader吗?

我的文本文件中的每一行都是24个字符。

1 个答案:

答案 0 :(得分:1)

如果问题特定于StremReader.ReadLine(),则可能是:

  • 下一行中的字符数大于Int32.MaxValue
  • 传递给StremReader构造函数的缓冲区太小