我正在处理大文件,从 10Gb 开始。我正在将文件的部分加载到内存中进行处理。以下代码适用于较小的文件(700Mb)
byte[] byteArr = new byte[layerPixelCount];
using (FileStream fs = File.OpenRead(recFileName))
{
using (BinaryReader br = new BinaryReader(fs))
{
fs.Seek(offset, SeekOrigin.Begin);
for (int i = 0; i < byteArr.Length; i++)
{
byteArr[i] = (byte)(br.ReadUInt16() / 256);
}
}
}
打开一个10Gb的文件后,第一次运行这个函数就OK了。但第二个Seek()
抛出IO
异常:
An attempt was made to move the file pointer before the beginning of the file.
数字是:
fs.Length = 11998628352
偏移量 = 4252580352
byteArr.Length = 7746048
我假设 GCfs
在第二次调用之前没有收集关闭的引用并尝试了
GC.Collect();
GC.WaitForPendingFinalizers();
但没有运气。
感谢任何帮助