我有许多从 ftp 下载的要解压缩的大型 gzip 文件(大约 10MB - 200MB)。
所以我试图谷歌并找到一些gzip解压缩的解决方案。
static byte[] Decompress(byte[] gzip)
{
using (GZipStream stream = new GZipStream(new MemoryStream(gzip), CompressionMode.Decompress))
{
const int size = 4096;
byte[] buffer = new byte[size];
using (MemoryStream memory = new MemoryStream())
{
int count = 0;
do
{
count = stream.Read(buffer, 0, size);
if (count > 0)
{
memory.Write(buffer, 0, count);
}
}
while (count > 0);
return memory.ToArray();
}
}
}
它适用于 50mb 以下的任何文件,但是一旦我输入超过 50mb 的文件,我就会遇到系统内存不足异常。异常前的最后位置和内存长度是 134217728。我认为它与我的物理内存无关,我知道我使用 32 位,所以我不能拥有超过 2GB 的对象。
我还需要在解压缩文件后处理数据。我不确定内存流是否是这里最好的方法,但我真的不喜欢写入文件然后再次读取文件。
我的问题
- 为什么我得到 System.OutMemoryException?
- 解压缩 gzip 文件并在之后进行一些文本处理的最佳解决方案是什么?