我有许多大的gzip文件(大约10MB到200MB),是我从ftp下载的需要解压缩的文件。
于是,我试图在谷歌上找到一些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的对象。
我还需要在解压缩文件后处理数据。我不确定MemoryStream是否是最好的方法,但我不喜欢先将文件写入磁盘再重新读取文件。
我的问题:
- 为什么会出现System.OutMemoryException?
- 最佳的解压gzip文件并进行文本处理的方法是什么?